$config->session_time) { session_unset(); session_destroy(); session_start(); $_SESSION['hash'] = $hash; } $_SESSION['last_activity'] = $time; return $_SESSION['hash']; } $_SESSION['hash'] = $hash; return $hash; } function PP_DestroySession($hash = 0, $id_utente = 0){ global $config; if (!empty($hash)) { $hash = PP_Secure($hash); session_unset(); session_destroy(); $query = "DELETE FROM " . T_SESSIONI . " WHERE hash = :hash"; $par = array("hash" => $hash); $config->database->query($query, $par); } if (!empty($id_utente)) { $id_utente = PP_Secure($id_utente); session_unset(); session_destroy(); $query = "DELETE FROM " . T_SESSIONI . " WHERE id_utente = :id_utente"; $par = array("id_utente" => $id_utente); $config->database->query($query, $par); } return true; } function PP_CheckSession($hash = '', $require_login = false) { global $config; if (!isset($_SESSION['hash']) || empty($_SESSION['hash'])) { return false; } if (empty($hash)) { return false; } if ($hash == $_SESSION['hash']) { if(!$require_login){ return true; }else{ $query = "SELECT id_utente FROM " . T_SESSIONI . " WHERE hash = :hash LIMIT 1"; $par = array("hash" => $hash); $query_sql = $config->database->query($query, $par); if (count($query_sql) > 0 && $query_sql[0]['id_utente'] > 0 && !empty($_SESSION['id_utente']) && $query_sql[0]['id_utente'] == $_SESSION['id_utente']) { if($config->utente == null){ $config->utente = PP_GetUtente($query_sql[0]['id_utente']); } return true; } } } return false; } function PP_GetIP() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; } function PP_Secure($string, $censored_words = 1, $br = true, $strip = 0) { global $config; $string = trim($string); $string = PP_CleanString($string); //$string = mysqli_real_escape_string($config->db, $string); //$string = htmlspecialchars($string, ENT_QUOTES); if ($br == true) { $string = str_replace('\r\n', "
", $string); $string = str_replace('\n\r', "
", $string); $string = str_replace('\r', "
", $string); $string = str_replace('\n', "
", $string); } else { $string = str_replace('\r\n', "", $string); $string = str_replace('\n\r', "", $string); $string = str_replace('\r', "", $string); $string = str_replace('\n', "", $string); } if ($strip == 1) { $string = stripslashes($string); } //$string = str_replace('&#', '&#', $string); /* if ($censored_words == 1) { global $config; $censored_words = @explode(",", $config['censored_words']); foreach ($censored_words as $censored_word) { $censored_word = trim($censored_word); $string = str_replace($censored_word, '****', $string); } } */ return $string; } function PP_CleanString($string) { return $string = preg_replace("/&#?[a-z0-9]+;/i","", $string); } function PP_PrintIfKeyExist($array, $key){ if(array_key_exists($key, $array)) { return $array[$key]; } return null; } function PP_Implode($glue, $array){ return !empty($array) ? implode($glue, $array) : ''; } function PP_ArrayType($array){ if(array_keys($array) !== range(0, count($array) - 1)) return "associative"; else return "sequential"; } function PP_SearchComune($data){ global $config; if(strlen($data['term']) >= 2){ $query = "SELECT id as id, comune as label, id as value FROM " . T_COMUNI . " WHERE comune LIKE '%{$data['term']}%'"; $comuni = $config->database->query($query, array()); return $comuni; }else{ return null; } } function PP_GetComuneById($id){ global $config; $query = "SELECT * FROM " . T_COMUNI . " WHERE id = :id"; $par = array("id" => $id); $comuni = $config->database->query($query, $par); if(count($comuni) == 1){ return $comuni[0]; } return null; } function PP_TempoDueCifre($tempo){ if(intval($tempo) < 10){ $tempo = '0'.$tempo; } return $tempo; } function PP_db2viewDate($date){ if(empty($date)) return null; return date("d/m/Y", strtotime($date)); } function PP_view2dbDate($date){ if(empty($date)) return null; return date("Y-m-d", strtotime(str_replace('/', '-', $date))); } function PP_db2viewDatetime($date){ if(empty($date)) return null; return date("d/m/Y H:i:s", strtotime($date)); } function PP_view2dbDatetime($date){ if(empty($date)) return null; return date("Y-m-d H:i:s", strtotime(str_replace('/', '-', $date))); } /* function PP_db2viewDatetime($date){ if(empty($date)) return null; return date("Y-m-d\TH:i:s", strtotime($date)); } function PP_view2dbDatetime($date){ if(empty($date)) return null; return date("Y-m-d H:i:s", strtotime($date)); } */ function PP_SearchInArray($array, $field, $value) { foreach ($array as &$row) { if ($row[$field] === $value) { return $row; } } return null; } function PP_IsJson($string) { $result = json_decode($string); if(json_last_error() === JSON_ERROR_NONE){ return true; }else{ return false; } } function PP_UrlfyString($string){ return preg_replace('/[^a-zA-Z0-9_-]+/', '-', strtolower($string)); } function PP_SecureFilePath($path){ $nome_file = explode(".", $path); $ext = array_pop($nome_file); $nome_file = implode(".", $nome_file); $path = PP_CartellaUpload().$nome_file.'.'.$ext; $i = 1; while(file_exists(ABSPATH.$path)){ $path = PP_CartellaUpload().$nome_file.'_'.$i.'.'.$ext; $i++; } return $path; } /******** ELEMENTI ********/ function PP_SelectPicker($id, $value_obj, $null_text = 'Seleziona un valore', $elements, $label = '', $text_key = null, $value_key = null, $multiple = ''){ $value_set = PP_PrintIfKeyExist($value_obj, $id); $name = $multiple == '' ? $id : $id.'[]'; $select = '
'; return $select; } function PP_Checkbox($id, $value_obj, $elements, $label = ''){ $checkbox = '
'; $value_set = PP_PrintIfKeyExist($value_obj, $id); foreach($elements as $key => $item){ $checked = ''; if(is_array($value_set) && in_array($key, $value_set)){ $checked = "checked"; } $checkbox.= "
$item
"; } return $checkbox; } function PP_Radioinput($id, $value_obj, $elements, $label = ''){ $checkbox = '
'; $value_set = PP_PrintIfKeyExist($value_obj, $id); foreach($elements as $key => $item){ $checked = ''; if(PP_ArrayType($elements) == "sequential"){ $key = $item; } if(is_array($value_set) && in_array($key, $value_set)){ $checked = "checked"; } $checkbox.= "
$item
"; } return $checkbox; } function PP_Textbox($type, $id, $label = '', $placeholder = '', $value_obj = null, $readonly = '', $step = '', $min = '', $max = ''){ if($type == 'datetime-local') $value = PP_db2viewDatetime(PP_PrintIfKeyExist($value_obj,$id)); else $value = PP_PrintIfKeyExist($value_obj,$id); $textbox = ''; return $textbox; } function PP_Filebox($id, $label = '', $value_obj = null, $multiple="", $ext = ""){ $filebox = '
'; if(!empty($value_obj[$id])){ foreach($value_obj[$id] as $path){ $filename = explode("/", $path); $filename = $filename[count($filename) - 1]; $filebox.= ''.$filename.''; } } $filebox.= '
'; return $filebox; } function PP_Textarea($id, $label = '', $value_obj = null, $rows=5){ $textarea = ''; $textarea = ''; return $textarea; } function PP_Imagebox($id, $value_obj = null){ $imgsrc = (PP_PrintIfKeyExist($value_obj,$id)) ? PATH.PP_PrintIfKeyExist($value_obj,$id) : PATH.'img/default-product-img.png'; $imagebox = ''; return $imagebox; } /****PDF*******/ function PP_GeneraPDF($content, $filename, $termini_condizioni = false, $firma = false){ // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // set document information /* $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Zen Technology'); $pdf->SetTitle('Zen Technology'); $pdf->SetSubject('Viale Italia 70, 96011,
Augusta (SR)'); */ $title = "Zen Technology"; $address = "Viale Italia 70, 96011, Augusta (SR)\nTel +39 0931 992613 info@zentechnology.it"; // set default header data $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $title, $address, array(0,0,0), array(0,0,0)); $pdf->setFooterData(array(0,0,0), array(0,0,0)); // set header and footer fonts $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // set margins $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); // set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); // set image scale factor $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // set some language-dependent strings (optional) if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { require_once(dirname(__FILE__).'/lang/eng.php'); $pdf->setLanguageArray($l); } // --------------------------------------------------------- // set default font subsetting mode $pdf->setFontSubsetting(true); // Set font // dejavusans is a UTF-8 Unicode font, if you only need to // print standard ASCII chars, you can use core fonts like // helvetica or times to reduce file size. $pdf->SetFont('dejavusans', '', 14, '', true); // Add a page // This method has several options, check the source code documentation for more information. $pdf->AddPage(); // set text shadow effect //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); // Print text using writeHTMLCell() $pdf->writeHTML($content, true, false, true, false, ''); // --------------------------------------------------------- if($termini_condizioni){ $pdf->AddPage(); ob_start(); include(ABSPATH.'doc/template/termini-condizioni.php'); $content_termini_condizioni = ob_get_contents(); ob_end_clean(); //$content_termini_condizioni = file_get_contents(ABSPATH.'doc/template/termini-condizioni.php'); $pdf->writeHTML($content_termini_condizioni, true, false, true, false, ''); } // Close and output PDF document // This method has several options, check the source code documentation for more information. $pdf->Output(ABSPATH.'doc/archivio/'.$filename.'.pdf', 'F'); ob_end_clean(); return true; } function PP_CaricaFirma($data){ global $config; if(!empty($data['firma'])){ $firma = $data['firma']; $firma = str_replace('data:image/png;base64,', '', $firma); $firma = str_replace(' ', '+', $firma); $firma = base64_decode($firma); file_put_contents(ABSPATH.'doc/firma/firma.png', $firma); return true; } return false; } function PP_CartellaUpload(){ $y = date('Y'); $m = date('m'); $path = ABSPATH.'upload/'.$y; if(!is_dir($path)){ mkdir($path); } $path = ABSPATH.'upload/'.$y.'/'.$m; if(!is_dir($path)){ mkdir($path); } $path = 'upload/'.$y.'/'.$m.'/'; return $path; } /*** EMAIL ****/ function PP_SendMail($mailobj, $marketing = false){ $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Mailer = "smtp"; $mail->SMTPAuth = true; /* $mail->SMTPSecure = "tls"; $mail->Port = 587; $mail->Host = "smtp.gmail.com"; $mail->Username = "prenotaposti@gmail.com"; $mail->Password = "seagaldeniro"; */ $mail->SMTPSecure = "ssl"; $mail->Port = 465; $mail->Host = "smtps.aruba.it"; $mail->Username = "info@prenotaposti.it"; $mail->Password = "seagaldeniro"; $mail->IsHTML(true); foreach($mailobj['to'] as $email){ $mail->AddAddress($email); } /* if(!isset($mailobj['nodebug'])){ $mail->addBCC("xxx@gmail.com"); } */ $mail->SetFrom("info@zentechnology.it", "ZenTechnology"); //$mail->AddReplyTo("info@prenotaposti.it", "ZenTechnology"); if(isset($mailobj['attachment'])) $mail->AddAttachment($mailobj['attachment'], 'documentazione.pdf'); $mail->Subject =$mailobj['subject']; $template = file_get_contents(PATH."class/mail/template_mail.html"); $template = str_replace("##content##", $mailobj['content'], $template); if($marketing){ $template = str_replace("##unsubscribe##", "
Non vuoi più ricevere queste comunicazioni?
unsubscribe
", $template); }else{ $template = str_replace("##unsubscribe##", "", $template); } $mail->MsgHTML($template); if(!$mail->Send()) { return $mail->ErrorInfo;; } else { return true; } } /***NOTIFICHE***/ function PP_CreaNotifica($data){ global $config; $id_mittente = PP_Secure(PP_PrintIfKeyExist($data, 'id_mittente')); $id_destinatario = PP_Secure(PP_PrintIfKeyExist($data, 'id_destinatario')); $titolo = PP_Secure(PP_PrintIfKeyExist($data, 'titolo')); $contenuto = PP_Secure(PP_PrintIfKeyExist($data, 'contenuto')); $tipo = PP_Secure(PP_PrintIfKeyExist($data, 'tipo')); $link = PP_Secure(PP_PrintIfKeyExist($data, 'link')); $id_univoco = PP_PrintIfKeyExist($data, 'id_univoco') != '' ? PP_PrintIfKeyExist($data, 'id_univoco') : 0; $data_notifica = PP_PrintIfKeyExist($data, 'data_notifica') != '' ? PP_PrintIfKeyExist($data, 'data_notifica') : date("Y-m-d"); $query = "INSERT INTO " . T_NOTIFICHE . " (id_mittente, id_destinatario, titolo, contenuto, data_notifica, tipo, link, id_univoco) VALUES (:id_mittente, :id_destinatario, :titolo, :contenuto, :data_notifica, :tipo, :link, :id_univoco)"; $par = array("id_mittente" => $id_mittente, "id_destinatario" => $id_destinatario, "titolo" => $titolo, "contenuto" => $contenuto, "data_notifica" => $data_notifica, "tipo" => $tipo, "link" => $link, "id_univoco" => $id_univoco); if($config->database->query($query, $par)){ return $config->database->lastInsertId(); } return 0; } function PP_NotificaLetta($data){ global $config; $id_utente = $config->utente['id']; $query = "UPDATE " . T_NOTIFICHE . " SET data_lettura = '".date("Y-m-d H:i:s")."' WHERE data_notifica <= '".date("Y-m-d")."' AND id_destinatario = :id_destinatario"; $par = array("id_destinatario" => $id_utente); if($config->database->query($query, $par)){ return true; } return false; } function PP_GetNotifiche($data){ global $config; $query_where = null; $par = array(); if(isset($data['id_destinatario'])){ $query_where[] = ' id_destinatario = :id_destinatario '; $par["id_destinatario"] = $data['id_destinatario']; }else{ $query_where[] = ' id_destinatario = :id_destinatario '; $par["id_destinatario"] = $_SESSION['id_utente']; } $query_where[] = ' data_notifica <= "'.date("Y-m-d").'"'; if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT * FROM " . T_NOTIFICHE . " $query_where ORDER BY id DESC"; $notifiche = $config->database->query($query, $par); return $notifiche; } /**PARAMETRI**/ function PP_GetParametri($data){ global $config; $query_where = null; if(!empty($data['gruppo'])){ $query_where[] = " gruppo = '".PP_Secure($data['gruppo'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT gruppo, valore, campo FROM " . T_PARAMETRI . " $query_where"; $query = $config->database->query($query, array()); $parametri = []; foreach($query as $p){ if(!isset($parametri[$p["gruppo"]])){ $parametri[$p["gruppo"]] = []; } $parametri[$p["gruppo"]][$p['valore']] = $p['campo']; } return $parametri; } function PP_AggiornaParametriInline($data){ global $config; $update_query = "{$data['campo']} = '{$data['valore']}'"; $query = "UPDATE " . T_PARAMETRI . " SET $update_query WHERE id = {$data['id']}"; if($config->database->query($query, array())){ return $data['id']; } return null; } function PP_AggiungiParametro($data){ global $config; $query = "INSERT INTO " . T_PARAMETRI . " (gruppo) VALUES ('nuovo_gruppo')"; $config->database->query($query, array()); return true; } function PP_EliminaParametri($data){ global $config; $query_where = []; if(!empty($data['id'])){ $query_where[] = ' id = '.$data['id']; } if(count($query_where) > 0){ $query = "DELETE FROM " . T_PARAMETRI . " WHERE ".implode(" AND ", $query_where); $config->database->query($query, array()); return true; } return false; } function PP_GetUnitaOperative(){ global $config; $query = "SELECT * FROM " . T_UNITA_OPERATIVE . " "; $query = $config->database->query($query, array()); return $query; } ?>utente['id']; $var_tecniche = array('f', 'hash', 'password', 're_password', 'ruolo'); $query_update = array(); foreach($data as $key=>$value){ if(!in_array($key, $var_tecniche)){ array_push($query_update, " $key = '".PP_Secure($value)."' "); } } if(!empty($data['password'])){ if($data['password'] == $data['re_password'] && PP_PasswordSecure($data['password'])){ $password = md5($data['password']); array_push($query_update, " password = '$password' "); }else{ return false; } } if($query_update){ $query_update = " SET ".implode(", ", $query_update); } $query = "UPDATE " . T_UTENTI . " $query_update WHERE id = $id_utente"; $par = array("id"=>$id_utente); if($config->database->query($query, $par) > 0){ return true; } return false; } function PP_Login($data){ global $config; if(empty($data['email'])){ return false; } if(empty($data['password'])){ return false; } $email = PP_Secure($data['email']); $password = PP_Secure($data['password']); $md5password = md5($password); /*Inutile perchè setto la password direttamente lato cli if(isset($_COOKIE["remember_password"]) && isset($_COOKIE["remember_email"]) && $_COOKIE["remember_email"] == $data['email'] && !isset($data['password'])) { $md5password = md5($_COOKIE["remember_password"]); }else{ $md5password = md5($password); } */ $query = "SELECT * FROM " . T_UTENTI . " WHERE email = :email AND password = :password LIMIT 1"; $par = array("email" => $email, "password" => $md5password); $query_sql = $config->database->query($query, $par); if (count($query_sql) > 0 && !empty($query_sql[0]['id'])) { $query_sql = $query_sql[0]; $data_creazione = date('Y-m-d H:i:s'); $ip = PP_GetIP(); PP_DestroySession($data['hash']); session_start(); if(!empty($data["remember"])) { setcookie ("remember_email", $email, time() + $config->cookie_time, "/"); setcookie ("remember_password", $password, time() + $config->cookie_time, "/"); } else { if(isset($_COOKIE["remember_email"])) { setcookie ("remember_email", "", 0, "/"); setcookie ("remember_password", "", 0, "/"); } } $_SESSION['hash'] = $data['hash']; $_SESSION['id_utente'] = $query_sql['id']; $query = "INSERT INTO " . T_SESSIONI . " (id_utente, hash, data_creazione, ip) VALUES (:id_utente, :hash, :data_creazione, :ip)"; $par = array("id_utente" => $query_sql['id'], "hash" => $data['hash'], "data_creazione" => $data_creazione, "ip" => $ip); $config->database->query($query, $par); $query = "UPDATE " . T_UTENTI . " SET data_ultimo_accesso = :data_creazione WHERE id = :id"; $par = array("data_creazione" => $data_creazione, "id" => $query_sql['id']); $config->database->query($query, $par); return true; } return false; } function PP_Logout(){ global $config; if(!empty($_SESSION['hash']) && !empty($_SESSION['id_utente'])){ PP_DestroySession($_SESSION['hash'], $_SESSION['id_utente']); }else{ session_unset(); session_destroy(); } return true; } function PP_Loggato(){ global $config; if(!empty($_SESSION['id_utente']) && !empty($_SESSION['hash'])){ $query = "SELECT * FROM " . T_SESSIONI . " WHERE hash = :hash AND id_utente = :id_utente LIMIT 1"; $par = array("hash" => $_SESSION['hash'], "id_utente" => $_SESSION['id_utente']); $query_sql = $config->database->query($query, $par); if (count($query_sql) > 0 && !empty($query_sql[0]['id'])) { return true; } } return false; } function PP_PaginaVisitabile($pagina){ global $config; $pagine_visitabili = ['', 'login', 'logout']; if(in_array($pagina, $pagine_visitabili)) return true; foreach($config->utente['menu'] as $menu){ if(isset($menu->link)){ if(is_array($menu->link)){ foreach($menu->link as $submenu){ if($submenu->link == $pagina) return true; } }else{ if($menu->link == $pagina) return true; } } } return false; } function PP_EmailExist($email){ global $config; $email = PP_Secure($email); $query = "SELECT id, email FROM " . T_UTENTI . " WHERE email = :email LIMIT 1"; $par = array("email" => $email); $query_sql = $config->database->query($query, $par); if (count($query_sql) > 0 && !empty($query_sql[0]['email']) && $query_sql[0]['email'] == $email) { return $query_sql['id']; } return false; } function PP_GetUtente($id){ global $config; $id = PP_Secure($id); $query = "SELECT t.*, tu.nome as ruolo, tu.menu FROM " . T_UTENTI . " t LEFT JOIN " .T_UTENTI_RUOLI. " tu ON t.id_ruolo = tu.id WHERE t.id = :id LIMIT 1"; $par = array("id" => $id); $utente = $config->database->query($query, $par); if(count($utente) == 1){ $utente = $utente[0]; if($utente['id_ruolo'] == 1){ $utente["medici"] = PP_GetMediciAssegnati(array("id_paziente" => $id)); $utente["medici"] = PP_GetPazientiAssegnati(array("id_medico" => $id)); } if($utente['id_ruolo'] == 2){ $utente["pazienti"] = PP_GetPazientiAssegnati(array("id_medico" => $id)); } if($utente['id_ruolo'] == 3){ $utente["medici"] = PP_GetMediciAssegnati(array("id_paziente" => $id)); } $notifiche = PP_GetNotifiche(array("id_destinatario"=>$id)); $utente['notifiche'] = $notifiche; $utente['menu'] = json_decode($utente['menu']); return $utente; } return null; } function PP_GetRuoliUtenti(){ global $config; $query = "SELECT * FROM " . T_UTENTI_RUOLI; $ruoli = $config->database->query($query, array()); return $ruoli; } function PP_EliminaUtente($data){ global $config; $query_where = array(); $par = array(); if(!empty($data['id'])){ $query_where[] = ' id = :id '; $par['id'] = $data['id']; } if($query_where){ $query = "DELETE FROM " . T_UTENTI . " WHERE ".implode(" AND ", $query_where); $config->database->query($query, $par); /* if(!empty($data['id'])){ //Rimozione ricorsiva di attivita, posti, fasce, prenotazioni $attivita = PP_AttivitaUtente($data['id']); PP_EliminaAttivita(array("id_utente" => $data['id']), true); foreach($attivita as $a){ PP_EliminaPosto(array("id_attivita" => $a['id']), true); PP_EliminaTempo(array("id_attivita" => $a['id']), true); PP_EliminaPrenotazione(array("id_attivita" => $a['id']), true); } PP_EliminaPrenotazione(array("id_utente" => $data['id']), true); } */ return true; } return false; } function PP_GetListaUtenti(){ global $config; $query = "SELECT u.id, u.email, u.nome, u.cognome, DATE_FORMAT(u.data_creazione, '%d/%m/%Y %H:%i:%s'), ur.ruolo FROM " . T_UTENTI . " u JOIN ". T_UTENTI_RUOLI." ur ON u.id_ruolo = ur.id"; $utenti = $config->database->query($query, array()); /* $utenti = []; while($utente = mysqli_fetch_array($query, MYSQLI_NUM)){ $utenti[]= $utente; } */ return $utenti; } function PP_PasswordSecure($password){ if(strlen($password) >= 4){ return true; } return false; } ?>utente)){ $query_where[] = " pm.id_paziente = '".PP_Secure($data['id_paziente'])."' "; }else{ $query_where[] = " pm.id_paziente = '".PP_Secure($config->utente['id'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT u.* FROM " . T_PAZIENTI_MEDICI . " pm LEFT JOIN " . T_UTENTI . " u ON u.id = pm.id_medico $query_where"; $medici = $config->database->query($query, array()); return $medici; } function PP_GetPrenotazioniPaziente($data = null){ global $config; $id_paziente = $config->utente['id']; $query_where[] = " p.id_paziente = $id_paziente "; if(!empty($data['id'])){ $query_where[] = " p.id = '".PP_Secure($data['id'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT pd.*, p.id as id_prenotazione, p.data_prenotazione, p.data_creazione, p.id_stato, ps.colore, motivazione.valore as motivazione, allegati.valore as allegati, CONCAT(u.nome, ' ', u.cognome) as nome_medico FROM " . T_PRENOTAZIONI . " p LEFT JOIN " . T_UTENTI . " u ON p.id_medico = u.id LEFT JOIN " . T_PRENOTAZIONI_DISPONIBILITA . " pd ON p.id_disponibilita = pd.id LEFT JOIN " . T_PRENOTAZIONI_STATI . " ps ON p.id_stato = ps.id LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " motivazione ON motivazione.id_prenotazione = p.id AND motivazione.campo = 'motivazione' LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " allegati ON allegati.id_prenotazione = p.id AND allegati.campo = 'allegati' $query_where ORDER BY p.data_prenotazione DESC"; $prenotazioni = $config->database->query($query, array()); return $prenotazioni; } function PP_GetPrenotazioniDisponibilita($data = null){ global $config; $id_paziente = $config->utente['id']; $query_where[] = " pm.id_paziente = {$config->utente['id']} "; if(!empty($data['giorno_settimana'])){ $query_where[] = " pd.giorno_settimana = ".PP_Secure($data['giorno_settimana'])." "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query_join = ""; if(!empty($data['data_prenotazione'])){ $query_join = " AND p.data_prenotazione = '".PP_Secure($data['data_prenotazione'])."' "; } $query = "SELECT pd.*, p.id_stato, ps.colore FROM " . T_PRENOTAZIONI_DISPONIBILITA . " pd LEFT JOIN " . T_PAZIENTI_MEDICI . " pm ON pd.id_medico = pm.id_medico LEFT JOIN " . T_PRENOTAZIONI . " p ON p.id_disponibilita = pd.id $query_join LEFT JOIN " . T_PRENOTAZIONI_STATI . " ps ON p.id_stato = ps.id $query_where "; $disponibilita = $config->database->query($query, array()); return $disponibilita; } function PP_Prenotabile($data){ global $config; $id_paziente = $config->utente['id']; $query_where[] = " id_paziente = $id_paziente "; if(!empty($data['data_prenotazione'])){ $query_where[] = " data_prenotazione = '".PP_Secure($data['data_prenotazione'])."' "; } if(!empty($data['id_medico'])){ $query_where[] = " id_medico = ".PP_Secure($data['id_medico'])." "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query_join = ""; $query = "SELECT * FROM " . T_PRENOTAZIONI . " $query_where "; $query = $config->database->query($query, array()); if(count($query) > 0){ return false; } return true; } function PP_SalvaPrenotazione($data, $files){ global $config; if(empty($data['data_prenotazione']) || empty($data['id_medico']) || empty($data['id_disponibilita']) || !PP_Prenotabile($data)){ return false; } $id_paziente = $config->utente['id']; $id_medico = PP_Secure($data['id_medico']); $id_disponibilita = PP_Secure($data['id_disponibilita']); $data_prenotazione = PP_Secure($data['data_prenotazione']); $query = "INSERT INTO " . T_PRENOTAZIONI. " (id_paziente, id_medico, id_disponibilita, data_prenotazione, id_stato) VALUES ($id_paziente, $id_medico, $id_disponibilita, '$data_prenotazione', 2)"; $config->database->query($query, array()); $id_prenotazione = $config->database->lastInsertId(); if($id_prenotazione > 0){ $var_tecniche = array('id_paziente', 'data_prenotazione', 'id_medico', 'id_disponibilita', 'f', 'hash'); $query_dettagli = ''; $keys = []; foreach($data as $key=>$value){ if(!in_array($key, $var_tecniche) && $value != ''){ if(is_array($value)){ $value = json_encode($value); } $query_dettagli.= " ($id_prenotazione, '$key', '$value'),"; $keys[] = "'".$key."'"; } } if(strlen($query_dettagli)>0){ //Cancello le chiavi da aggiornare $query_rimuovi_dettagli = "DELETE FROM ".T_PRENOTAZIONI_DETTAGLI." WHERE id_prenotazione = $id_prenotazione AND campo IN (".implode(",", $keys).")"; $config->database->query($query_rimuovi_dettagli, array()); $query_dettagli = substr($query_dettagli, 0, strlen($query_dettagli) - 1); $query_dettagli = "INSERT INTO " . T_PRENOTAZIONI_DETTAGLI. " (id_prenotazione, campo, valore) VALUES ".$query_dettagli.";"; $config->database->query($query_dettagli, array()); } //Salvo i files if($files){ //Scorro i files allegati foreach($files as $key => $value){ $n_files = count($value["name"]); $paths = []; for($i=0; $i<$n_files; $i++){ $path = PP_SecureFilePath($value["name"][$i]); move_uploaded_file($value["tmp_name"][$i],ABSPATH.$path); $paths[]= $path; } //Mantengo quelli esistenti $query_files = "SELECT * FROM " .T_PRENOTAZIONI_DETTAGLI. " WHERE id_prenotazione = $id_prenotazione"; $dettagli_prenotazione = $config->database->query($query_files, array()); if(isset($dettagli_prenotazione[$key]) && is_array($dettagli_prenotazione[$key])){ $paths = array_merge($paths, $dettagli_prenotazione[$key]); } $query_rimuovi_dettagli = "DELETE FROM ".T_PRENOTAZIONI_DETTAGLI." WHERE id_prenotazione = $id_prenotazione AND campo IN ('$key')"; $config->database->query($query_rimuovi_dettagli, array()); $query_dettagli = "INSERT INTO " . T_PRENOTAZIONI_DETTAGLI. " (id_prenotazione, campo, valore) VALUES ($id_prenotazione, '$key', '".json_encode($paths)."');"; $config->database->query($query_dettagli, array()); } } PP_CreaNotifica(array('id_mittente' => $id_paziente, 'id_destinatario' => $id_medico, 'titolo' => 'Prenotazione da confermare', 'contenuto' => 'Nuova prenotazione per giorno '.PP_db2viewDate($data_prenotazione), 'tipo' => 'fas fa-exclamation-circle', 'link' => 'calendario_prenotazioni/'.$data_prenotazione )); return true; } return false; } function PP_EliminaPrenotazionePaziente($data = null){ global $config; if(empty($data['id'])){ return false; } $id = PP_Secure($data['id']); $prenotazione = PP_GetPrenotazioniPaziente(array("id"=>$id)); if(count($prenotazione) > 0){ $prenotazione = $prenotazione[0]; $id_paziente = $config->utente['id']; $id_medico = $prenotazione['id_medico']; $data_prenotazione = $prenotazione['data_prenotazione']; $query = "DELETE FROM ". T_PRENOTAZIONI ." WHERE id = $id AND id_paziente = $id_paziente"; if($config->database->query($query, array())){ PP_CreaNotifica(array('id_mittente' => $id_paziente, 'id_destinatario' => $id_medico, 'titolo' => 'Prenotazione annullata', 'contenuto' => 'Prenotazione per giorno '.PP_db2viewDate($data_prenotazione).' annullata', 'tipo' => 'fas fa-exclamation-circle', 'link' => 'calendario_prenotazioni/'.$data_prenotazione )); return true; } } return false; } function PP_GetDiariClinici($data = null){ global $config; $query_where = null; $query_where[] = " id_paziente = {$config->utente['id']} "; if(!empty($data['data_diario_clinico'])){ $query_where[] = " data_diario_clinico = '".PP_Secure($data['data_diario_clinico'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT * FROM " . T_DIARI_CLINICI . " $query_where"; $query = $config->database->query($query, array()); $diari_clinici = []; foreach($query as $diario_clinico){ if(!isset($diari_clinici[$diario_clinico["id_paziente"]])){ $diari_clinici[$diario_clinico["id_paziente"]] = []; } if(!isset($diari_clinici[$diario_clinico["id_paziente"]][$diario_clinico["data_diario_clinico"]])){ $diari_clinici[$diario_clinico["id_paziente"]][$diario_clinico["data_diario_clinico"]] = []; } if(PP_IsJson($diario_clinico["valore"])){ $diario_clinico["valore"] = json_decode($diario_clinico["valore"]); } $diari_clinici[$diario_clinico["id_paziente"]][$diario_clinico["data_diario_clinico"]][$diario_clinico["campo"]] = $diario_clinico["valore"]; } return $diari_clinici; } function PP_SalvaDiarioClinico($data, $files){ global $config; if(empty($data['data_diario_clinico'])){ return false; } $id_paziente = $config->utente['id']; $data_diario_clinico = PP_Secure($data['data_diario_clinico']); $var_tecniche = array('id_paziente', 'data_diario_clinico', 'f', 'hash'); $query_dettagli = ''; $keys = []; foreach($data as $key=>$value){ if(!in_array($key, $var_tecniche) && $value != ''){ if(is_array($value)){ $value = json_encode($value); } $query_dettagli.= " ($id_paziente, '$data_diario_clinico', '$key', '$value'),"; $keys[] = "'".$key."'"; } } if(strlen($query_dettagli)>0){ //Cancello le chiavi da aggiornare $query_rimuovi_dettagli = "DELETE FROM ".T_DIARI_CLINICI." WHERE id_paziente = $id_paziente AND data_diario_clinico = '$data_diario_clinico' AND campo IN (".implode(",", $keys).")"; $config->database->query($query_rimuovi_dettagli, array()); $query_dettagli = substr($query_dettagli, 0, strlen($query_dettagli) - 1); $query_dettagli = "INSERT INTO " . T_DIARI_CLINICI. " (id_paziente, data_diario_clinico, campo, valore) VALUES ".$query_dettagli.";"; $config->database->query($query_dettagli, array()); } //Salvo i files if($files){ //Scorro i files allegati foreach($files as $key => $value){ $n_files = count($value["name"]); $paths = []; for($i=0; $i<$n_files; $i++){ $path = PP_SecureFilePath($value["name"][$i]); move_uploaded_file($value["tmp_name"][$i],ABSPATH.$path); $paths[]= $path; } //Mantengo quelli esistenti $diario_clinico = PP_GetDiariClinici(array('data_diario_clinico' => $data['data_diario_clinico'])); if($diario_clinico){ $diario_clinico = $diario_clinico[$id_paziente][$data['data_diario_clinico']]; } if(isset($diario_clinico[$key]) && is_array($diario_clinico[$key])){ $paths = array_merge($paths, $diario_clinico[$key]); } $query_rimuovi_dettagli = "DELETE FROM ".T_DIARI_CLINICI." WHERE id_paziente = $id_paziente AND data_diario_clinico = '$data_diario_clinico' AND campo IN ('$key')"; $config->database->query($query_rimuovi_dettagli, array()); $query_dettagli = "INSERT INTO " . T_DIARI_CLINICI. " (id_paziente, data_diario_clinico, campo, valore) VALUES ($id_paziente, '$data_diario_clinico', '$key', '".json_encode($paths)."');"; $config->database->query($query_dettagli, array()); } } return true; } function PP_EliminaFileDiarioClinico($data){ global $config; $query_where = []; if(empty($data['campo']) || empty($data['path']) || empty($data['data_diario_clinico'])){ return false; } $id_paziente = $config->utente['id']; $data_diario_clinico = PP_Secure($data['data_diario_clinico']); $campo = PP_Secure($data['campo']); $path = PP_Secure($data['path']); $query = "SELECT valore FROM " . T_DIARI_CLINICI ." WHERE id_paziente = $id_paziente AND data_diario_clinico = '$data_diario_clinico' AND campo = '$campo'"; $files = $config->database->query($query, array()); if(count($files) > 0){ $files = $files[0]; $files = json_decode($files['valore']); if (($key = array_search($path, $files)) !== false) { unlink(ABSPATH.$files[$key]); array_splice($files, $key, 1); } if(count($files) > 0){ $files = json_encode($files); $query = "UPDATE " . T_DIARI_CLINICI . " SET valore = '$files' WHERE id_paziente = $id_paziente AND data_diario_clinico = '$data_diario_clinico' AND campo = '$campo' "; $config->database->query($query, array()); }else{ $query = "DELETE FROM " . T_DIARI_CLINICI . " WHERE id_paziente = $id_paziente AND data_diario_clinico = '$data_diario_clinico' AND campo = '$campo' "; $config->database->query($query, array()); } return true; } return false; } function PP_ConfermaTerapia($data = null){ global $config; if(empty($data['id_calendario']) || empty($data['id_terapia'])){ return false; } $terapia = PP_GetTerapiePaziente(array("id" => PP_Secure($data['id_terapia']))); if(count($terapia) > 0){ $query = "UPDATE " . T_TERAPIE_CALENDARI . " SET esito = 1, data_esito='".date("Y-m-d H:i:s")."' WHERE id = '".PP_Secure($data['id_calendario'])."' "; if($config->database->query($query, array())){ if(!empty($data['id_notifica'])){ //Rimuovo la notifica $query = "DELETE FROM ".T_NOTIFICHE." WHERE id = ".$data['id_notifica']; $config->database->query($query, array()); } return true; } } return false; } /***** VISITE *****/ function PP_GetVisitePaziente($data = null){ global $config; $id_paziente = $config->utente['id']; $query_where[] = " v.id_paziente = :id_paziente "; $par["id_paziente"] = $id_paziente; if(!empty($data['id'])){ $query_where[] = " v.id = :id "; $par["id"] = $data['id']; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT v.id as id_visita, v.id_paziente, v.id_tipologia, v.data_visita, v.data_creazione, CONCAT(u.nome, ' ', u.cognome) as nome_medico, v.id_stato, vs.nome as nome_stato, vs.colore, v.dati, (SELECT COUNT(*) FROM " . T_VISITE . " WHERE DATE(data_visita) = DATE(v.data_visita) AND data_visita < v.data_visita AND id_paziente != v.id_paziente AND id_stato = 2) as coda FROM " . T_VISITE . " v LEFT JOIN " . T_UTENTI . " u ON v.id_medico = u.id LEFT JOIN " . T_VISITE_STATI . " vs ON v.id_stato = vs.id $query_where ORDER BY v.data_visita DESC, v.id_stato DESC"; $visite = $config->database->query($query, $par); foreach($visite as $k=>$v){ $visite[$k]["dati"] = json_decode($v["dati"],JSON_OBJECT_AS_ARRAY); $visite[$k]["start"] = date("Y-m-d\TH:i:s",strtotime($v["data_visita"])); $visite[$k]["end"] = date("Y-m-d\TH:i:s",strtotime($v["data_visita"]." +30 minutes")); $visite[$k]["title"] = $v["nome_medico"]; $visite[$k]["color"] = $config->colori[$v["colore"]]; $visite[$k]["giorno"] = date("m/d/Y",strtotime($v["data_visita"])); $visite[$k]["ora"] =date("H:i",strtotime($v["data_visita"])); } return $visite; } ?>database->query($query, array()); if(!empty($data['id_paziente']) && count($pazienti) == 1){ $query_dettagli = "SELECT * FROM " . T_PAZIENTI_DETTAGLI . " WHERE id_paziente = ".PP_Secure($data['id_paziente']); $dettagli_paziente = $config->database->query($query_dettagli, array()); foreach($dettagli_paziente as $d){ $pazienti[0][$d['campo']] = $d['valore']; } } return $pazienti; } function OLD_PP_GetPazientiUfa($data = null){ global $config; $query_where = null; if(!empty($data['id_medico'])){ $query_where[] = " pm.id_medico = '".PP_Secure($data['id_medico'])."' "; } if(!empty($data['id_paziente'])){ $query_where[] = " u.id = '".PP_Secure($data['id_paziente'])."' AND u.id_ruolo = 3 "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "select paz.pazienti_nome as nome, paz.pazienti_cognome as cognome, paz.pazienti_datanascita as data_nascita, CONCAT(paz.pazienti_nome, ' ', paz.pazienti_cognome) as nome_paziente, CONCAT('UFA_', paz.pazienti_codice) as id, d.diagnosi_descrizione as diagnosi, prot.protocolli_descrizioneprotocol as protocollo_terapeutico from pazienti paz inner join associazione ass on paz.pazienti_codice = ass.pazienti_codice inner join protocolli prot on ass.associazione_codiceprotocollo = prot.protocolli_codiceprotocollo inner join diagnosi d on ass.associazione_codicediagnosi = d.diagnosi_codice where paz.pazienti_codice = :id_paziente limit 1"; $pazienti = $config->database_ext->query($query, array("id_paziente" => $data['id_paziente'])); /*if(!empty($data['id_paziente']) && count($pazienti) == 1){ $query_dettagli = "SELECT * FROM " . T_PAZIENTI_DETTAGLI . " WHERE id_paziente = ".PP_Secure($data['id_paziente']); $dettagli_paziente = $config->database->query($query_dettagli, array()); foreach($dettagli_paziente as $d){ $pazienti[0][$d['campo']] = $d['valore']; } }*/ return $pazienti; } function PP_SalvaPaziente($data = null){ global $config; if(empty($data['nome']) || empty($data['cognome']) || empty($data['email']) || empty($data['data_nascita'])){ return null; } $par_paziente = array( 'nome' => PP_Secure($data['nome']), 'cognome' => PP_Secure($data['cognome']), 'email' => PP_Secure($data['email']), 'password' => md5('ciao'), 'data_nascita' => PP_Secure($data['data_nascita']), 'codice_fiscale' => PP_Secure(strtoupper($data['codice_fiscale'])), 'sesso' => PP_Secure($data['sesso']), 'luogo_nascita' => PP_Secure($data['luogo_nascita']), 'telefono' => PP_Secure($data['telefono']), 'indirizzo' => PP_Secure($data['indirizzo']), 'citta' => PP_Secure($data['citta']), // NUOVI CAMPI 'medico_base' => PP_Secure($data['medico_base']), 'contatto_emergenza' => PP_Secure($data['contatto_emergenza']), 'esenzione_ticket' => PP_Secure($data['esenzione_ticket']), 'allergie' => PP_Secure($data['allergie']), 'terapie_incorso' => PP_Secure($data['terapie_incorso']), 'abitudini_vita' => PP_Secure($data['abitudini_vita']) ); $query_paziente = "INSERT INTO " . T_UTENTI. " (id_ruolo, nome, cognome, email, password, data_nascita, codice_fiscale, sesso, luogo_nascita, telefono, indirizzo, citta, medico_base, contatto_emergenza, esenzione_ticket, allergie, terapie_incorso, abitudini_vita) VALUES (3, :nome, :cognome, :email, :password, :data_nascita, :codice_fiscale, :sesso, :luogo_nascita, :telefono, :indirizzo, :citta, :medico_base, :contatto_emergenza, :esenzione_ticket, :allergie, :terapie_incorso, :abitudini_vita)"; $config->database->query($query_paziente, $par_paziente); $id_paziente = $config->database->lastInsertId(); if( $id_paziente > 0){ $par_paziente_medico = !empty($data['id_medico']) ? array('id_medico' => $data['id_medico'], 'id_paziente' => $id_paziente) : array('id_medico' => $config->utente['id'], 'id_paziente' => $id_paziente); $query_paziente_medico = "INSERT INTO " . T_PAZIENTI_MEDICI. " (id_medico, id_paziente) VALUES (:id_medico, :id_paziente)"; $config->database->query($query_paziente_medico, $par_paziente_medico); $par_paziente_dettagli = array_diff_key($data, $par_paziente); $par_paziente_dettagli = array_diff_key($par_paziente_dettagli, $par_paziente_medico); $values = array(); foreach($par_paziente_dettagli as $k => $v){ array_push($values, "($id_paziente, '".$k."', '".$v."')"); } $values = implode(",", $values); $query_paziente_dettagli = "INSERT INTO " . T_PAZIENTI_DETTAGLI. " (id_paziente, campo, valore) VALUES $values;"; $config->database->query($query_paziente_dettagli, array()); $paziente = PP_GetPazienti(array("id_paziente" => $id_paziente)); if(count($paziente) == 1){ return $paziente; } } return null; } function PP_ModificaPaziente($data = null){ global $config; if(empty($data['id_paziente']) || empty($data['nome']) || empty($data['cognome']) || empty($data['email']) || empty($data['data_nascita'])){ return null; } $id_paziente = $data['id_paziente']; $par_paziente = array( 'id_paziente' => $id_paziente, 'nome' => PP_Secure($data['nome']), 'cognome' => PP_Secure($data['cognome']), 'email' => PP_Secure($data['email']), 'data_nascita' => PP_Secure($data['data_nascita']), 'codice_fiscale' => PP_Secure(strtoupper($data['codice_fiscale'])), 'sesso' => PP_Secure($data['sesso']), 'luogo_nascita' => PP_Secure($data['luogo_nascita']), 'telefono' => PP_Secure($data['telefono']), 'indirizzo' => PP_Secure($data['indirizzo']), 'citta' => PP_Secure($data['citta']), // NUOVI CAMPI 'medico_base' => PP_Secure($data['medico_base']), 'contatto_emergenza' => PP_Secure($data['contatto_emergenza']), 'esenzione_ticket' => PP_Secure($data['esenzione_ticket']), 'allergie' => PP_Secure($data['allergie']), 'terapie_incorso' => PP_Secure($data['terapie_incorso']), 'abitudini_vita' => PP_Secure($data['abitudini_vita']) ); $query_paziente = "UPDATE " . T_UTENTI. " SET nome = :nome, cognome = :cognome, email = :email, data_nascita = :data_nascita, codice_fiscale = :codice_fiscale, sesso = :sesso, luogo_nascita = :luogo_nascita, telefono = :telefono, indirizzo = :indirizzo, citta = :citta, medico_base = :medico_base, contatto_emergenza = :contatto_emergenza, esenzione_ticket = :esenzione_ticket, allergie = :allergie, terapie_incorso = :terapie_incorso, abitudini_vita = :abitudini_vita WHERE id = :id_paziente"; $config->database->query($query_paziente, $par_paziente); $par_reset = array("id_paziente" => $id_paziente); $query_reset = "DELETE FROM " . T_PAZIENTI_DETTAGLI. " WHERE id_paziente = :id_paziente"; $config->database->query($query_reset, $par_reset); $par_paziente_dettagli = array_diff_key($data, $par_paziente); foreach($par_paziente_dettagli as $k => $v){ if($v!=''){ $query_paziente_dettagli = "INSERT INTO " . T_PAZIENTI_DETTAGLI. " (id_paziente, campo, valore) VALUES (:id_paziente, :campo, :valore);"; $config->database->query($query_paziente_dettagli, array("id_paziente" => $id_paziente, "campo" => $k, "valore" => $v)); } } $paziente = PP_GetPazienti(array("id_paziente" => $id_paziente)); if(count($paziente) > 0){ return $paziente; } return null; } function PP_EliminaPaziente($data = null){ global $config; if(empty($data['id_paziente'])){ return null; } $par = array("id_paziente" => $data['id_paziente']); $query = "DELETE FROM " . T_UTENTI. " WHERE id = :id_paziente"; $config->database->query($query, $par); $query = "DELETE FROM " . T_PAZIENTI_MEDICI. " WHERE id_paziente = :id_paziente"; $config->database->query($query, $par); $par = array("id_paziente" => $data['id_paziente']); $query = "DELETE FROM " . T_PAZIENTI_DETTAGLI. " WHERE id_paziente = :id_paziente"; $config->database->query($query, $par); } function PP_GetPazientiAssegnati($data = null){ global $config; $query_where = null; if(!empty($data['id_medico']) && empty($config->utente)){ $query_where[] = " pm.id_medico = '".PP_Secure($data['id_medico'])."' "; }else{ $query_where[] = " pm.id_medico = '".PP_Secure($config->utente['id'])."' "; } if(!empty($data['id_paziente'])){ $query_where[] = " u.id = '".PP_Secure($data['id_paziente'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT u.*, CONCAT(u.nome, ' ', u.cognome) as nome_paziente FROM " . T_PAZIENTI_MEDICI . " pm RIGHT JOIN " . T_UTENTI . " u ON u.id = pm.id_paziente $query_where"; $pazienti = $config->database->query($query, array()); /*$query = "select CONCAT(paz.pazienti_nome, ' ', paz.pazienti_cognome) as nome_paziente, CONCAT('UFA_', paz.pazienti_codice) as id from pazienti paz inner join associazione ass on paz.pazienti_codice = ass.pazienti_codice inner join protocolli prot on ass.associazione_codiceprotocollo = prot.protocolli_codiceprotocollo where prot.protocolli_dispensazione = true;"; $pazienti_ufa = $config->database_ext->query($query, array());*/ return $pazienti; } function PP_GetFasceOrarie($data = null){ global $config; $id_medico = $config->utente['id']; $query_where[] = " pd.id_medico = $id_medico "; if(!empty($data['giorno_settimana'])){ $query_where[] = " pd.giorno_settimana = ".PP_Secure($data['giorno_settimana'])." "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query_join = ""; if(!empty($data['data_prenotazione'])){ $query_join = " AND p.data_prenotazione = '".PP_Secure($data['data_prenotazione'])."' "; } $query = "SELECT pd.*, p.id_stato, ps.colore FROM " . T_PRENOTAZIONI_DISPONIBILITA . " pd LEFT JOIN " . T_PRENOTAZIONI . " p ON p.id_disponibilita = pd.id $query_join LEFT JOIN " . T_PRENOTAZIONI_STATI . " ps ON p.id_stato = ps.id $query_where "; $query = $config->database->query($query, array()); $fasce = []; foreach($query as $d){ $key = PP_TempoDueCifre($d['ora_inizio']).":".PP_TempoDueCifre($d['minuto_inizio'])." - ".PP_TempoDueCifre($d['ora_fine']).":".PP_TempoDueCifre($d['minuto_fine']); if(!isset($fasce[$key])){ $fasce[$key] = []; } array_push($fasce[$key], $d); } return $fasce; } function PP_SalvaFasciaOraria($data = null){ global $config; if(empty($data['ora_inizio']) || empty($data['ora_fine']) || empty($data['giorni_settimana'])){ return false; } $id_medico = $config->utente['id']; $ora_inizio = PP_Secure($data['ora_inizio']); $minuto_inizio = PP_Secure($data['minuto_inizio']); $ora_fine = PP_Secure($data['ora_fine']); $minuto_fine = PP_Secure($data['minuto_fine']); if(PP_IsJson($data['giorni_settimana'])) $giorni_settimana = json_decode($data['giorni_settimana']); //Verifico se salvabile $query = "SELECT id, STR_TO_DATE(CONCAT(ora_inizio,':', minuto_inizio), '%H:%i') as orario_inizio_limite, STR_TO_DATE(CONCAT(ora_fine,':', minuto_fine), '%H:%i') as orario_fine_limite, STR_TO_DATE('$ora_inizio:$minuto_inizio', '%H:%i') as orario_inizio, STR_TO_DATE('$ora_fine:$minuto_fine', '%H:%i') as orario_fine FROM ".T_PRENOTAZIONI_DISPONIBILITA." WHERE id_medico = $id_medico AND giorno_settimana in (".implode(",",$giorni_settimana).") HAVING (orario_inizio > orario_inizio_limite AND orario_inizio < orario_fine_limite) OR (orario_fine > orario_inizio_limite AND orario_fine < orario_fine_limite) OR (orario_inizio < orario_inizio_limite AND orario_fine > orario_fine_limite) OR (orario_inizio < orario_inizio_limite AND orario_fine >= orario_fine_limite) OR (orario_inizio <= orario_inizio_limite AND orario_fine > orario_fine_limite)"; $query = $config->database->query($query, array()); if(count($query) > 0) return false; $query_insert = array(); if(is_array($giorni_settimana)){ foreach($giorni_settimana as $giorno_settimana){ array_push($query_insert, " ($id_medico, $giorno_settimana, $ora_inizio, $minuto_inizio, $ora_fine, $minuto_fine) "); } if(count($query_insert) > 0){ $query_insert = " VALUES ".implode(" , ", $query_insert).";"; $query = "INSERT INTO " . T_PRENOTAZIONI_DISPONIBILITA. " (id_medico, giorno_settimana, ora_inizio, minuto_inizio, ora_fine, minuto_fine) $query_insert"; $config->database->query($query, array()); return true; } } return false; } function PP_EliminaFasciaOraria($data = null){ global $config; if(empty($data['id'])){ return false; } $id = PP_Secure($data['id']); $id_medico = $config->utente['id']; $query = "DELETE FROM ". T_PRENOTAZIONI_DISPONIBILITA ." WHERE id in($id) AND id_medico = $id_medico"; if($config->database->query($query, array())){ return true; } return false; } function PP_GetPrenotazioniMedico($data = null){ global $config; $id_medico = $config->utente['id']; $query_where[] = " p.id_medico = $id_medico "; if(!empty($data['data_prenotazione'])){ $query_where[] = " p.data_prenotazione = '".PP_Secure($data['data_prenotazione'])."' "; } if(!empty($data['data_inizio'])){ $query_where[] = " p.data_prenotazione >= '".PP_Secure($data['data_inizio'])."' "; } if(!empty($data['data_fine'])){ $query_where[] = " p.data_prenotazione <= '".PP_Secure($data['data_fine'])."' "; } if(!empty($data['id'])){ $query_where[] = " p.id = '".PP_Secure($data['id'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT pd.*, p.id as id_prenotazione, p.id_paziente, p.data_prenotazione, p.data_creazione, p.id_stato, ps.colore, motivazione.valore as motivazione, allegati.valore as allegati, CONCAT(u.nome, ' ', u.cognome) as nome_paziente FROM " . T_PRENOTAZIONI . " p LEFT JOIN " . T_UTENTI . " u ON p.id_paziente = u.id LEFT JOIN " . T_PRENOTAZIONI_DISPONIBILITA . " pd ON p.id_disponibilita = pd.id LEFT JOIN " . T_PRENOTAZIONI_STATI . " ps ON p.id_stato = ps.id LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " motivazione ON motivazione.id_prenotazione = p.id AND motivazione.campo = 'motivazione' LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " allegati ON allegati.id_prenotazione = p.id AND allegati.campo = 'allegati' $query_where ORDER BY p.id_stato DESC"; $query = $config->database->query($query, array()); $prenotazioni = []; foreach($query as $p){ $p['allegati'] = json_decode($p['allegati']); array_push($prenotazioni, $p); } return $prenotazioni; } function PP_GetPrenotazioniMedicoSettimana($data = null){ global $config; $id_medico = $config->utente['id']; $query_where[] = " pd.id_medico = $id_medico "; if(!empty($data['giorno_settimana'])){ $query_where[] = " pd.giorno_settimana = '".PP_Secure($data['giorno_settimana'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT pd.*, p.id as id_prenotazione, p.id_paziente, p.data_prenotazione, p.data_creazione, p.id_stato, ps.colore, motivazione.valore as motivazione, allegati.valore as allegati, CONCAT(u.nome, ' ', u.cognome) as nome_paziente FROM " . T_PRENOTAZIONI_DISPONIBILITA . " pd LEFT JOIN " . T_PRENOTAZIONI . " p ON p.id_disponibilita = pd.id AND p.data_prenotazione >= '".PP_Secure($data['data_inizio'])."' AND p.data_prenotazione <= '".PP_Secure($data['data_fine'])."' LEFT JOIN " . T_UTENTI . " u ON p.id_paziente = u.id LEFT JOIN " . T_PRENOTAZIONI_STATI . " ps ON p.id_stato = ps.id LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " motivazione ON motivazione.id_prenotazione = p.id AND motivazione.campo = 'motivazione' LEFT JOIN " . T_PRENOTAZIONI_DETTAGLI . " allegati ON allegati.id_prenotazione = p.id AND allegati.campo = 'allegati' $query_where ORDER BY pd.giorno_settimana, pd.ora_inizio, pd.minuto_inizio"; $query = $config->database->query($query, array()); $prenotazioni = []; foreach($query as $p){ $p['allegati'] = json_decode($p['allegati']); array_push($prenotazioni, $p); } return $prenotazioni; } function PP_ConfermaPrenotazione($data = null){ global $config; if(empty($data['id'])){ return false; } $id_medico = $config->utente['id']; $query_where[] = " id_medico = $id_medico "; if(!empty($data['id'])){ $query_where[] = " id = '".PP_Secure($data['id'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "UPDATE " . T_PRENOTAZIONI . " SET id_stato = 3 $query_where"; if($config->database->query($query, array())){ $prenotazione = PP_GetPrenotazioniMedico(array('id' => PP_Secure($data['id']))); if(count($prenotazione) > 0){ $prenotazione = $prenotazione[0]; PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $prenotazione['id_paziente'], 'titolo' => 'Prenotazione confermata', 'contenuto' => 'La prenotazione per giorno '.PP_db2viewDate($prenotazione['data_prenotazione']).' dalle '.PP_TempoDueCifre($prenotazione['ora_inizio']).':'.PP_TempoDueCifre($prenotazione['minuto_inizio']).' alle '.PP_TempoDueCifre($prenotazione['ora_fine']).':'.PP_TempoDueCifre($prenotazione['minuto_fine']).' è stata confermata', 'tipo' => 'far fa-check-circle', 'link' => 'le_mie_prenotazioni' )); return true; } } return false; } function PP_EliminaPrenotazioneMedico($data = null){ global $config; if(empty($data['id'])){ return false; } $id = PP_Secure($data['id']); $motivazione = ''; if(isset($data['motivazione'])){ $motivazione = $data['motivazione']; } $prenotazione = PP_GetPrenotazioniMedico(array("id"=>$id)); if(count($prenotazione) > 0){ $prenotazione = $prenotazione[0]; $id_medico = $config->utente['id']; $id_paziente = $prenotazione['id_paziente']; $data_prenotazione = $prenotazione['data_prenotazione']; //Elimino allegati e dettagli if(isset($prenotazione["allegati"])){ foreach($prenotazione["allegati"] as $allegato){ unlink(ABSPATH.$allegato); } } $query = "DELETE FROM ". T_PRENOTAZIONI_DETTAGLI ." WHERE id_prenotazione = $id"; $config->database->query($query, array()); $query = "DELETE FROM ". T_PRENOTAZIONI ." WHERE id = $id AND id_medico = $id_medico"; if($config->database->query($query, array())){ PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $id_paziente, 'titolo' => 'Prenotazione annullata', 'contenuto' => 'Prenotazione per giorno '.PP_db2viewDate($data_prenotazione).' annullata con il seguente motivo: '.$motivazione, 'tipo' => 'fas fa-exclamation-circle', 'link' => 'le-mie-prenotazioni' )); return true; } } return false; } function PP_GetDiariCliniciPaziente($data){ global $config; $query_where = null; $query_where[] = " pm.id_medico = {$config->utente['id']} "; if(!empty($data['id_paziente'])){ $query_where[] = " d.id_paziente = ".PP_Secure($data['id_paziente'])." "; } if(!empty($data['data_inizio'])){ $query_where[] = " d.data_diario_clinico >= '".PP_Secure($data['data_inizio'])."' "; } if(!empty($data['data_fine'])){ $query_where[] = " d.data_diario_clinico <= '".PP_Secure($data['data_fine'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT * FROM " . T_DIARI_CLINICI . " d JOIN " . T_PAZIENTI_MEDICI . " pm ON d.id_paziente = pm.id_paziente $query_where ORDER BY d.data_diario_clinico ASC"; $query = $config->database->query($query, array()); $diari_clinici = []; foreach($query as $diario_clinico){ $valore = $diario_clinico["valore"]; if(!isset($diari_clinici[$diario_clinico["campo"]])){ $diari_clinici[$diario_clinico["campo"]] = []; } if(PP_IsJson($valore)){ $valore = json_decode($valore); } /* if(in_array('valori_'.$diario_clinico["campo"], array_keys($config->parametri))){ $valore = $config->parametri['valori_'.$diario_clinico["campo"]][$valore]; } */ $diari_clinici[$diario_clinico["campo"]][$diario_clinico["data_diario_clinico"]] = $valore; } return $diari_clinici; } function PP_GetTerapiePaziente($data = null){ global $config; if(!empty($data['id_paziente'])){ $id_medico = empty($data['id_medico']) ? $config->utente['id'] : $data['id_medico']; $query_where[] = " t.id_paziente = ".PP_Secure($data['id_paziente'])." "; $query_where[] = " t.id_medico = $id_medico "; } if(empty($data['id_paziente'])){ $id_paziente = $config->utente['id']; $query_where[] = " t.id_paziente = $id_paziente"; } if(!empty($data['id'])){ $query_where[] = " t.id = ".PP_Secure($data['id'])." "; } if(!empty($data['data_notifica'])){ $query_where[] = " tc.data_notifica = '".PP_Secure($data['data_notifica'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT t.*, tc.id as id_calendario, tc.data_notifica, tc.esito, tc.data_esito FROM " . T_TERAPIE . " t LEFT JOIN " . T_UTENTI . " u ON t.id_paziente = u.id LEFT JOIN " .T_TERAPIE_CALENDARI." tc ON tc.id_terapia = t.id $query_where ORDER BY t.id DESC, tc.id ASC"; $query = $config->database->query($query, array()); $terapie = []; foreach($query as $t){ if(!isset($terapie[$t['id']])){ $terapie[$t['id']] = $t; $terapie[$t['id']]['calendario'] = []; array_push($terapie[$t['id']]['calendario'], array("id_calendario" => $t["id_calendario"], "data_notifica" => $t["data_notifica"], "esito" => $t["esito"], "data_esito" => $t["data_esito"])); }else{ array_push($terapie[$t['id']]['calendario'], array("id_calendario" => $t["id_calendario"], "data_notifica" => $t["data_notifica"], "esito" => $t["esito"], "data_esito" => $t["data_esito"])); } } $terapie = array_values($terapie); return $terapie; } function OLD_PP_GetTerapiePazienteUfa($data = null){ global $config; $query = "select dos.dosaggi_id as id, dos.dosaggi_codicepaziente, dos.dosaggi_numeroassociazione, dos.dosaggi_ciclo, dos.dosaggi_giorno as frequenza, 'D' as unita_misura_frequenza, dos.dosaggi_datasomministrazione as data_inizio, dos.dosaggi_datasomministrazione + INTERVAL '30 days' as data_fine, dos.dosaggi_creatinina, -- in realtà è l'ordine di somministrazione farm.farmaci_codice, farm.farmaci_descrizione as farmaco, dos.dosaggi_doseprevista as quantita, LOWER(farm.farmaci_unitadimisura) as unita_misura_quantita, formfarm.formefarmaceutiche_codice, formfarm.formefarmaceutiche_descrizione, tab.tabelle_codice, tab.tabelle_descrizione from dosaggi dos inner join farmaci farm on dos.dosaggi_codicefarmaco = farm.farmaci_codice inner join formefarmaceutiche formfarm on dos.dosaggi_codiceforma = formfarm.formefarmaceutiche_codice inner join tabelle tab on dos.dosaggi_tr_somministrazione = tab.tabelle_tipo and dos.dosaggi_codicesomministrazione = tab.tabelle_codice where dos.dosaggi_codicepaziente = :id_paziente and dos.dosaggi_numeroassociazione = 6 order by dos.dosaggi_numeroassociazione , dos.dosaggi_ciclo , dos.dosaggi_giorno, dos.dosaggi_creatinina;"; /*$query = "SELECT t.*, tc.id as id_calendario, tc.data_notifica, tc.esito, tc.data_esito FROM " . T_TERAPIE . " t LEFT JOIN " . T_UTENTI . " u ON t.id_paziente = u.id LEFT JOIN " .T_TERAPIE_CALENDARI." tc ON tc.id_terapia = t.id $query_where ORDER BY t.id DESC, tc.id ASC";*/ $query = $config->database_ext->query($query, array("id_paziente" => $data['id_paziente'])); $terapie = []; foreach($query as $t){ if(!isset($terapie[$t['id']])){ $terapie[$t['id']] = $t; $terapie[$t['id']]['calendario'] = array(); for($i = 1; $i<=28; $i++){ $date = date_create($t['data_inizio']); date_add($date, date_interval_create_from_date_string(($i-1)." days")); $esito = $date >= date_create() ? 0 : 1; $date = date_format($date, "Y-m-d"); array_push($terapie[$t['id']]['calendario'], array("id_calendario" => $t['id']."_".$i, "data_notifica" => $date, "esito" => $esito, "data_esito" => $date)); } //$terapie[$t['id']]['calendario'] = []; //array_push($terapie[$t['id']]['calendario'], array("id_calendario" => $t["id_calendario"], "data_notifica" => $t["data_notifica"], "esito" => $t["esito"], "data_esito" => $t["data_esito"])); } //else{ // array_push($terapie[$t['id']]['calendario'], array("id_calendario" => $t["id_calendario"], "data_notifica" => $t["data_notifica"], "esito" => $t["esito"], "data_esito" => $t["data_esito"])); //} } $terapie = array_values($terapie); return $terapie; } function PP_SalvaTerapia($data = null){ global $config; if(empty($data['id_paziente']) || empty($data['farmaco']) || empty($data['quantita']) || empty($data['unita_misura_quantita']) || empty($data['data_inizio']) || (empty($data['data_fine']) && empty($data['durata']) && empty($data['unita_misura_durata']))){ return null; } if(!(empty($data['data_inizio'])) && !(empty($data['data_fine'])) && date("Y-m-d",strtotime($data['data_inizio'])) > date("Y-m-d",strtotime($data['data_fine']))){ return null; } $id_medico = empty($data['id_medico']) ? $config->utente['id'] : $data['id_medico']; $id_paziente = PP_Secure($data['id_paziente']); $farmaco = PP_Secure($data['farmaco']); $quantita = PP_Secure($data['quantita']) != '' ? PP_Secure($data['quantita']) : 0; $unita_misura_quantita = PP_Secure($data['unita_misura_quantita']); $data_inizio = PP_Secure($data['data_inizio']); $data_fine = PP_Secure($data['data_fine']) != '' ? "'".PP_Secure($data['data_fine'])."'" : "NULL" ; $durata = empty($data['durata']) ? 0 : PP_Secure($data['durata']); $unita_misura_durata = PP_Secure($data['unita_misura_durata']); $frequenza = PP_Secure($data['frequenza']) != '' ? PP_Secure($data['frequenza']) : 0; $unita_misura_frequenza = PP_Secure($data['unita_misura_frequenza']); $stomaco_pieno = PP_PrintIfKeyExist($data, 'stomaco_pieno') != '' ? 1 : 0; $note = PP_Secure($data['note']); $id_ufa = empty($data['id_ufa']) ? "NULL" : "'".PP_Secure($data['id_ufa'])."'" ; $query = "INSERT INTO " . T_TERAPIE. " (id_medico, id_paziente, farmaco, quantita, unita_misura_quantita, data_inizio, data_fine, durata, unita_misura_durata, frequenza, unita_misura_frequenza, stomaco_pieno, note, id_ufa) VALUES (:id_medico, :id_paziente, :farmaco, :quantita, :unita_misura_quantita, :data_inizio, $data_fine, :durata, :unita_misura_durata, :frequenza, :unita_misura_frequenza, :stomaco_pieno, :note, $id_ufa)"; $config->database->query($query, array("id_medico" => $id_medico, "id_paziente" => $id_paziente, "farmaco" => $farmaco, "quantita" => $quantita, "unita_misura_quantita" => $unita_misura_quantita, "data_inizio" => $data_inizio, "durata" => $durata, "unita_misura_durata" => $unita_misura_durata, "frequenza" => $frequenza, "unita_misura_frequenza" => $unita_misura_frequenza, "stomaco_pieno" => $stomaco_pieno, "note" => $note)); $id_terapia = $config->database->lastInsertId(); if( $id_terapia > 0){ $terapia = PP_GetTerapiePaziente(array("id" => $id_terapia, "id_paziente" => $id_paziente, "id_medico" => $id_medico)); if(count($terapia) > 0){ $terapia = $terapia[0]; //Genero il calendario delle terapie e estraggo nuovamente la terapia if(PP_GeneraCalendarioTerapia(array('terapia' => $terapia))){ $terapia = PP_GetTerapiePaziente(array("id" => $id_terapia, "id_paziente" => $id_paziente, "id_medico" => $id_medico)); $terapia = $terapia[0]; $durata = ($terapia["durata"] > 0) ? " per ".$terapia["durata"]." ".$config->parametri["unita_misura_durata"][$terapia["unita_misura_durata"]] : " al ".PP_db2viewDate($terapia["data_fine"]); PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $id_paziente, 'titolo' => 'Nuova terapia assegnata', 'contenuto' => ''.$terapia["farmaco"].' dal '.PP_db2viewDate($terapia["data_inizio"]).' '.$durata, 'tipo' => 'fas fa-notes-medical', 'link' => 'le_mie_terapie' )); //Genero tutte le notifiche foreach($terapia["calendario"] as $c){ $contenuto_notifica = "Confermi di aver assunto la dose di ".$terapia['quantita']." ".$terapia['unita_misura_quantita']." di ".$terapia['farmaco']." programmata per oggi?
"; PP_CreaNotifica(array('id_mittente' => $terapia['id_medico'], 'id_destinatario' => $terapia['id_paziente'], 'titolo' => 'Terapia del giorno', 'contenuto' => $contenuto_notifica, 'data_notifica' => $c['data_notifica'], 'tipo' => 'fas fa-notes-medical', 'link' => 'le_mie_terapie', 'id_univoco' => $terapia['id'] )); } } return $terapia ; } } return null; } function PP_GeneraCalendarioTerapia($data = null){ global $config; if(empty($data['terapia'])){ return false; } $terapia = $data['terapia']; $query_insert = []; if(!isset($terapia['data_fine'])){ $terapia['data_fine'] = date('Y-m-d', strtotime("+".$terapia['durata']." ".$terapia['unita_misura_durata'], strtotime($terapia['data_inizio']))); } $intervallo = ''; switch($terapia['unita_misura_frequenza']){ case 'H': $intervallo = 'P0DT'.$terapia['frequenza'].'H'; break; case 'D': $intervallo = 'P'.$terapia['frequenza'].'D'; break; case 'W': $intervallo = 'P'.(intval($terapia['frequenza'])*7).'D'; break; case 'M': $intervallo = 'P'.$terapia['frequenza'].'M'; break; } $periodo_terapia = new DatePeriod(new DateTime($terapia['data_inizio']), new DateInterval($intervallo),new DateTime($terapia['data_fine'])); foreach ($periodo_terapia as $key => $value) { array_push($query_insert, "(".$terapia['id'].", '".$value->format('Y-m-d')."', 0)"); } if(count($query_insert) > 0){ $query_insert = implode(" , ", $query_insert); $query = "INSERT INTO ".T_TERAPIE_CALENDARI." (id_terapia, data_notifica, esito) VALUES $query_insert"; $config->database->query($query, array()); return true; } return false; } function PP_EliminaTerapia($data = null){ global $config; if(empty($data['id'])){ return false; } $id = PP_Secure($data['id']); $id_medico = $config->utente['id']; $query = "DELETE FROM ". T_TERAPIE ." WHERE id IN ($id) AND id_medico = $id_medico"; if($config->database->query($query, array())){ //Cancello i calendari e le notifiche programmate $query = "DELETE FROM ". T_TERAPIE_CALENDARI ." WHERE id_terapia IN ($id)"; $config->database->query($query, array()); $query = "DELETE FROM ". T_NOTIFICHE ." WHERE titolo = 'Terapia del giorno' AND id_univoco IN ($id)"; $config->database->query($query, array()); return true; } return false; } /******VISITE******/ function PP_GetVisiteMedico($data = null){ global $config; $id_medico = $config->utente['id']; $query_where[] = " v.id_medico = $id_medico "; if(!empty($data['data_prenotazione'])){ $query_where[] = " DATE(v.data_visita) = '".PP_Secure($data['data_prenotazione'])."' "; } if(!empty($data['data_inizio'])){ $query_where[] = " v.data_visita >= '".PP_Secure($data['data_inizio'])."' "; } if(!empty($data['data_fine'])){ $query_where[] = " v.data_visita <= '".PP_Secure($data['data_fine'])."' "; } if(!empty($data['id'])){ $query_where[] = " v.id = '".PP_Secure($data['id'])."' "; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT v.id as id_visita, v.id_paziente, v.data_visita, v.data_creazione, v.id_tipologia, p.campo as tipologia, CONCAT(u.nome, ' ', u.cognome) as nome_paziente, v.id_stato, vs.nome as nome_stato, vs.colore, v.dati, v.allegati, v.id_ufa FROM " . T_VISITE . " v LEFT JOIN " . T_UTENTI . " u ON v.id_paziente = u.id LEFT JOIN " . T_VISITE_STATI . " vs ON v.id_stato = vs.id LEFT JOIN " . T_PARAMETRI . " p ON p.valore = v.id_tipologia AND p.gruppo = 'tipologie_visite' $query_where ORDER BY v.data_visita, v.id_stato DESC"; $query = $config->database->query($query, array()); $visite = []; foreach($query as $p){ $data_visita = date("Y-m-d", strtotime($p["data_visita"])); if(!isset($visite[$data_visita])) $visite[$data_visita] = []; $p["dati"] = json_decode($p["dati"],JSON_OBJECT_AS_ARRAY); $p["allegati"] = json_decode($p["allegati"],JSON_OBJECT_AS_ARRAY); array_push($visite[$data_visita], $p); } return $visite; } function PP_GetVisite($data = null){ global $config; $id_medico = empty($data['id_medico']) ? $config->utente['id'] : $data['id_medico']; $query_where[] = " v.id_medico = :id_medico "; $par["id_medico"] = $id_medico; if(!empty($data['id'])){ $query_where[] = " v.id = :id "; $par["id"] = $data['id']; } if(!empty($data['id_paziente'])){ $query_where[] = " v.id_paziente = :id_paziente "; $par["id_paziente"] = $data['id_paziente']; } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query = "SELECT v.id as id_visita, v.id_paziente, v.data_visita, v.id_tipologia, p.campo as tipologia, v.data_creazione, CONCAT(u.nome, ' ', u.cognome) as nome_paziente, v.id_stato, vs.nome as nome_stato, vs.colore, v.dati, v.allegati, v.id_ufa FROM " . T_VISITE . " v LEFT JOIN " . T_UTENTI . " u ON v.id_paziente = u.id LEFT JOIN " . T_VISITE_STATI . " vs ON v.id_stato = vs.id LEFT JOIN " . T_PARAMETRI . " p ON p.valore = v.id_tipologia AND p.gruppo = 'tipologie_visite' $query_where ORDER BY v.data_visita, v.id_stato DESC"; $visite = $config->database->query($query, $par); foreach($visite as $k=>$v){ $visite[$k]["dati"] = json_decode($v["dati"],JSON_OBJECT_AS_ARRAY); $visite[$k]["allegati"] = json_decode($v["allegati"],JSON_OBJECT_AS_ARRAY); } return $visite; } function PP_ChiamaPazienteVisita($data = null){ global $config; if(empty($data['id_visita']) || empty($data['id_paziente'])){ return false; } $id_medico = $config->utente['id']; $query = "UPDATE " . T_VISITE . " SET id_stato = 4 WHERE id_stato = 3 AND id_medico = :id_medico"; $par = array("id_medico" => $id_medico); if($config->database->query($query, $par) > 0){ $query = "UPDATE " . T_VISITE . " SET id_stato = 3 WHERE id = :id_visita AND id_paziente = :id_paziente AND id_medico = :id_medico"; $par = array("id_visita" => $data['id_visita'], "id_paziente" => $data['id_paziente'], "id_medico" => $id_medico); if($config->database->query($query, $par) > 0){ $contenuto_notifica = "Attenzione è il tuo turno di visita"; PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $data['id_paziente'], 'titolo' => 'Turno di visita', 'contenuto' => $contenuto_notifica, 'tipo' => 'fas fa-bell', 'link' => 'le_mie_visite', 'id_univoco' => $data['id_visita'] )); return true; } } return false; } function PP_AnnullaVisita($data = null){ global $config; if(empty($data['id_visita'])){ return false; } $id_medico = $config->utente['id']; $visita = PP_GetVisite(array("id" => $data['id_visita'])); if(count($visita) == 1){ $visita = $visita[0]; $query = "DELETE FROM " . T_VISITE . " WHERE id = :id_visita AND id_medico = :id_medico"; $par = array("id_visita" => $data['id_visita'], "id_medico" => $id_medico); if($config->database->query($query, $par) > 0){ $contenuto_notifica = "Attenzione la visita prevista per il ".PP_db2viewDate($visita["data_visita"])." è stata annullata"; PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $visita['id_paziente'], 'titolo' => 'Visita annullata', 'contenuto' => $contenuto_notifica, 'tipo' => 'fas fa-bell', 'link' => 'le_mie_visite', )); return true; } } return false; } function PP_SalvaVisita($data = null, $files = null){ global $config; if(empty($data['id_paziente']) || empty($data['data_visita'])){ return null; } $data['dati'] = json_encode(array("unita_operativa" => $data['unita_operativa'], "stanza" => $data['stanza'], "note" => $data['note'])); $id_medico = empty($data['id_medico']) ? $config->utente['id'] : $data['id_medico']; $id_ufa = empty($data['id_ufa']) ? "NULL" : "'".PP_Secure($data['id_ufa'])."'" ; //Salvo i files if($files){ //Scorro i files allegati foreach($files as $key => $value){ $n_files = count($value["name"]); $paths = []; for($i=0; $i<$n_files; $i++){ $path = PP_SecureFilePath($value["name"][$i]); move_uploaded_file($value["tmp_name"][$i],ABSPATH.$path); $paths[]= $path; } $data["allegati"] = json_encode($paths); } }else{ $data["allegati"] = null; } $query = "INSERT INTO " . T_VISITE. " (id_medico, id_paziente, id_tipologia, data_visita, dati, allegati, id_ufa) VALUES (:id_medico, :id_paziente, :id_tipologia, :data_visita, :dati, :allegati, $id_ufa)"; $par = array("id_medico" => $id_medico, "id_paziente" => $data["id_paziente"], "id_tipologia" => $data["id_tipologia"], "data_visita" => $data["data_visita"], "allegati" => $data["allegati"], "dati" => $data["dati"]); $config->database->query($query, $par); $id_visita = $config->database->lastInsertId(); if( $id_visita > 0){ $visita = PP_GetVisite(array("id" => $id_visita, "id_paziente" => $data["id_paziente"], "id_medico" => $id_medico)); if(count($visita) > 0){ $visita = $visita[0]; $medico = PP_GetMedico($par); PP_CreaNotifica(array('id_mittente' => $id_medico, 'id_destinatario' => $data["id_paziente"], 'titolo' => 'Nuova visita assegnata', 'contenuto' => 'Visita assegnata da '.$medico['nome'].' '.$medico['cognome'].' per il '.PP_db2viewDate($visita["data_visita"]), 'tipo' => 'fas fa-stethoscope', 'link' => 'le_mie_visite' )); return $visita ; } } return null; } function PP_AssociaVisitaTerapia($data = null){ global $config; if(empty($data['id_visita']) || empty($data['id_terapia'])){ return null; } $query = "INSERT INTO visite_terapie (id_visita, id_terapia) VALUES (:id_visita, :id_terapia)"; $par = array("id_visita" => $data["id_visita"], "id_terapia" => $data["id_terapia"]); $config->database->query($query, $par); } /******* DATI MEDICO **********/ function PP_GetMedico($data = null){ global $config; if(empty($data['id_medico'])) { return null; } $query = " SELECT * FROM ".T_UTENTI." WHERE id = :id_medico LIMIT 1"; $par = array("id_medico" => $data["id_medico"]); $medico = $config->database->query($query, $par); return $medico[0]; } /******* EQUIPE **********/ function PP_GetEquipe($data = null){ global $config; $id_medico = $config->utente['id']; $query_where = " SELECT id_equipe FROM ".T_EQUIPE_MEDICI." WHERE id_medico = :id_medico "; $par["id_medico"] = $id_medico; if(!empty($data['id_equipe'])){ $query_where = " SELECT id_equipe FROM ".T_EQUIPE_MEDICI." WHERE id_medico = :id_medico AND id_equipe = :id_equipe "; $par["id_equipe"] = $data['id_equipe']; }else{ if(!empty($data['id_paziente'])){ $query_where = " SELECT ep.id_equipe FROM ".T_EQUIPE_PAZIENTI." ep LEFT JOIN ".T_EQUIPE_MEDICI." em ON ep.id_equipe = em.id_equipe WHERE em.id_medico = :id_medico AND ep.id_paziente = :id_paziente "; $par["id_paziente"] = $data['id_paziente']; } } $query = "SELECT e.id as id_equipe, e.data_creazione, e.data_modifica, em.id_medico, em.id_ordine, ep.id_paziente, e.nome as nome_equipe, CONCAT(um.nome, ' ', um.cognome) as nome_medico, CONCAT(up.nome, ' ', up.cognome) as nome_paziente FROM ".T_EQUIPE_MEDICI." em LEFT JOIN ".T_EQUIPE_PAZIENTI." ep ON em.id_equipe = ep.id_equipe LEFT JOIN ".T_EQUIPE." e ON e.id = em.id_equipe AND e.id = ep.id_equipe LEFT JOIN ".T_UTENTI." um on um.id = em.id_medico LEFT JOIN ".T_UTENTI." up on up.id = ep.id_paziente WHERE e.id IN ($query_where) ORDER BY e.id, ep.id_paziente, em.id_ordine"; $query = $config->database->query($query, $par); $equipe = []; foreach($query as $e){ if(!isset($equipe[$e['id_equipe']])){ $equipe[$e['id_equipe']] = []; $equipe[$e['id_equipe']]['id_equipe'] = $e['id_equipe']; $equipe[$e['id_equipe']]['nome_equipe'] = $e['nome_equipe']; $equipe[$e['id_equipe']]['data_creazione'] = $e['data_creazione']; $equipe[$e['id_equipe']]['data_modifica'] = $e['data_modifica']; $equipe[$e['id_equipe']]['medici'] = []; $equipe[$e['id_equipe']]['pazienti'] = []; } if(!isset($equipe[$e['id_equipe']]['medici'][$e['id_ordine']])){ $equipe[$e['id_equipe']]['medici'][$e['id_ordine']] = []; } if(!isset($equipe[$e['id_equipe']]['medici'][$e['id_ordine']][$e['id_medico']])){ $equipe[$e['id_equipe']]['medici'][$e['id_ordine']][$e['id_medico']] = []; $equipe[$e['id_equipe']]['medici'][$e['id_ordine']][$e['id_medico']]['id_medico'] = $e['id_medico']; $equipe[$e['id_equipe']]['medici'][$e['id_ordine']][$e['id_medico']]['nome_medico'] = $e['nome_medico']; $equipe[$e['id_equipe']]['medici'][$e['id_ordine']][$e['id_medico']]['id_ordine'] = $e['id_ordine']; } if(!isset($equipe[$e['id_equipe']]['pazienti'][$e['id_paziente']])){ $equipe[$e['id_equipe']]['pazienti'][$e['id_paziente']] = []; $equipe[$e['id_equipe']]['pazienti'][$e['id_paziente']]['id_paziente'] = $e['id_paziente']; $equipe[$e['id_equipe']]['pazienti'][$e['id_paziente']]['nome_paziente'] = $e['nome_paziente']; } } return $equipe; } function PP_GetDettagliEquipe($data = null){ global $config; $id_medico = $config->utente['id']; if(!empty($data['id_equipe']) && !empty($data['id_paziente'])){ $query = "SELECT dati FROM ".T_EQUIPE_PAZIENTI." WHERE id_equipe = :id_equipe AND id_paziente = :id_paziente"; $par = array("id_equipe" => $data['id_equipe'], "id_paziente" => $data['id_paziente']); $dettagli_equipe = $config->database->query($query, $par); if(count($dettagli_equipe) > 0){ $dettagli_equipe = $dettagli_equipe[0]; if(PP_IsJson($dettagli_equipe['dati'])){ $dettagli_equipe = json_decode($dettagli_equipe['dati']); return $dettagli_equipe; } } } return null; } function PP_SalvaEquipe($data = null){ global $config; } function PP_ModificaEquipe($data = null){ global $config; } function PP_EliminaEquipe($data = null){ global $config; } /********************************* * PROTOCOLLI DI CRONICITA *********************************/ /** * Ottiene i TEMPLATE di protocollo (modelli generici). * Usato per popolare la modale di assegnazione. * * @param array $data Può contenere 'id_protocollo_template' * @return array Lista di template */ function PP_GetProtocolliTemplate($data = null){ global $config; $id_medico = $config->utente['id']; $query_where = array(); $par = array("id_medico" => $id_medico); $query_where[] = " pct.id_medico_creatore = :id_medico "; if(!empty($data['id_protocollo_template'])){ $query_where[] = " pct.id = :id_protocollo_template "; $par["id_protocollo_template"] = PP_Secure($data['id_protocollo_template']); } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } $query_str = "SELECT pct.id as id_protocollo_template, pct.nome_protocollo, pct.descrizione, pct.durata_giorni_default, pcpt.id as id_prestazione_template, pcpt.tipo_prestazione, pcpt.nome_prestazione, pcpt.descrizione_prestazione, pcpt.schedulazione_tipo, pcpt.schedulazione_giorni_da_inizio, pcpt.schedulazione_frequenza_n, pcpt.schedulazione_frequenza_unit, pcpt.schedulazione_durata_n, pcpt.schedulazione_durata_unit FROM ".T_PROTOCOLLI_CRONICITA_TEMPLATE." pct LEFT JOIN ".T_PROTOCOLLI_CRONICITA_PRESTAZIONI_TEMPLATE." pcpt ON pct.id = pcpt.id_protocollo_template $query_where ORDER BY pct.nome_protocollo ASC, pcpt.id ASC"; $query = $config->database->query($query_str, $par); $templates = []; foreach($query as $row){ $id_template = $row['id_protocollo_template']; if(!isset($templates[$id_template])){ $templates[$id_template] = [ 'id_protocollo_template' => $id_template, 'nome_protocollo' => $row['nome_protocollo'], 'descrizione' => $row['descrizione'], 'durata_giorni_default' => $row['durata_giorni_default'], 'prestazioni' => [] ]; } if(!empty($row['id_prestazione_template'])){ // Aggiungi la prestazione solo se ha un ID $templates[$id_template]['prestazioni'][$row['id_prestazione_template']] = $row; } } foreach ($templates as $id_template => $template) { $templates[$id_template]['prestazioni'] = array_values($template['prestazioni']); } return array_values($templates); } /** * Salva un NUOVO template di protocollo (modello generico). * * @param array $data Dati del template (include 'prestazioni' come JSON string) * @return array|null Il template salvato o null */ function PP_SalvaProtocolloTemplate($data = null){ global $config; if(empty($data['nome_protocollo'])){ return null; } $id_medico = $config->utente['id']; $par_template = [ 'id_medico_creatore' => $id_medico, 'nome_protocollo' => PP_Secure($data['nome_protocollo']), 'descrizione' => PP_Secure($data['descrizione']), 'durata_giorni_default' => PP_Secure($data['durata_giorni_default']) ]; $query_template = "INSERT INTO ".T_PROTOCOLLI_CRONICITA_TEMPLATE." (id_medico_creatore, nome_protocollo, descrizione, durata_giorni_default) VALUES (:id_medico_creatore, :nome_protocollo, :descrizione, :durata_giorni_default)"; $config->database->query($query_template, $par_template); $id_protocollo_template = $config->database->lastInsertId(); if( $id_protocollo_template > 0 ){ // Decodifica l'array di prestazioni inviato dal JS $prestazioni = json_decode($data['prestazioni'], true); if(!empty($prestazioni) && is_array($prestazioni)){ foreach($prestazioni as $prestazione){ $par_prestazione = [ 'id_protocollo_template' => $id_protocollo_template, 'tipo_prestazione' => PP_Secure($prestazione['tipo_prestazione']), 'nome_prestazione' => PP_Secure($prestazione['nome_prestazione']), 'descrizione_prestazione' => PP_Secure($prestazione['descrizione_prestazione']), 'schedulazione_tipo' => PP_Secure($prestazione['schedulazione_tipo']), 'schedulazione_giorni_da_inizio' => 0, 'schedulazione_frequenza_n' => 0, 'schedulazione_frequenza_unit' => '', 'schedulazione_durata_n' => 0, 'schedulazione_durata_unit' => '' ]; if ($prestazione['schedulazione_tipo'] == 'ONE_OFF') { $par_prestazione['schedulazione_giorni_da_inizio'] = (int)$prestazione['schedulazione_giorni_da_inizio']; } else if ($prestazione['schedulazione_tipo'] == 'RECURRING') { $par_prestazione['schedulazione_frequenza_n'] = (int)$prestazione['schedulazione_frequenza_n']; $par_prestazione['schedulazione_frequenza_unit'] = PP_Secure($prestazione['schedulazione_frequenza_unit']); $par_prestazione['schedulazione_durata_n'] = (int)$prestazione['schedulazione_durata_n']; $par_prestazione['schedulazione_durata_unit'] = PP_Secure($prestazione['schedulazione_durata_unit']); } $query_prestazione = "INSERT INTO ".T_PROTOCOLLI_CRONICITA_PRESTAZIONI_TEMPLATE." (id_protocollo_template, tipo_prestazione, nome_prestazione, descrizione_prestazione, schedulazione_tipo, schedulazione_giorni_da_inizio, schedulazione_frequenza_n, schedulazione_frequenza_unit, schedulazione_durata_n, schedulazione_durata_unit) VALUES (:id_protocollo_template, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :schedulazione_tipo, :schedulazione_giorni_da_inizio, :schedulazione_frequenza_n, :schedulazione_frequenza_unit, :schedulazione_durata_n, :schedulazione_durata_unit)"; $config->database->query($query_prestazione, $par_prestazione); } } $template_creato = PP_GetProtocolliTemplate(array("id_protocollo_template" => $id_protocollo_template)); if(count($template_creato) == 1){ return $template_creato[0]; } } return null; } /** * ASSEGNA un template a un paziente, creando l'ISTANZA e GENERANDO le prestazioni. * Chiamata dalla modale in 'protocolli_cronicita.php'. * * @param array $data Deve contenere: id_protocollo_template, data_inizio, id_paziente * @return array L'istanza creata */ function PP_AssegnaProtocolloTemplate($data = null){ global $config; if(empty($data['id_protocollo_template']) || empty($data['data_inizio']) || empty($data['id_paziente'])){ return null; } $id_medico = $config->utente['id']; $id_protocollo_template = PP_Secure($data['id_protocollo_template']); $data_inizio_protocollo_str = PP_Secure($data['data_inizio']); $id_paziente_sec = PP_Secure($data['id_paziente']); $template_data = PP_GetProtocolliTemplate(array("id_protocollo_template" => $id_protocollo_template)); if(count($template_data) == 0){ return null; } $template = $template_data[0]; // 1. Crea l'ISTANZA del protocollo $par_istanza = [ 'id_paziente' => $id_paziente_sec, 'id_medico' => $id_medico, 'id_protocollo_template' => $id_protocollo_template, 'nome_protocollo' => $template['nome_protocollo'], 'descrizione' => $template['descrizione'], 'durata_giorni' => $template['durata_giorni_default'], 'data_inizio_protocollo' => $data_inizio_protocollo_str ]; $query_istanza = "INSERT INTO " . T_PROTOCOLLI_CRONICITA . " (id_paziente, id_medico, id_protocollo_template, nome_protocollo, descrizione, durata_giorni, data_inizio_protocollo) VALUES (:id_paziente, :id_medico, :id_protocollo_template, :nome_protocollo, :descrizione, :durata_giorni, :data_inizio_protocollo)"; $config->database->query($query_istanza, $par_istanza); $id_protocollo_istanza = $config->database->lastInsertId(); if($id_protocollo_istanza > 0){ // 2. Cicla su ogni REGOLA di prestazione del template foreach($template['prestazioni'] as $prestazione_template){ $start_date_protocollo = new DateTime($data_inizio_protocollo_str); $prestazioni_da_creare = []; $tipo_schedulazione = $prestazione_template['schedulazione_tipo']; if ($tipo_schedulazione == 'ONE_OFF') { $giorni_da_inizio = (int)$prestazione_template['schedulazione_giorni_da_inizio']; $data_calcolata = clone $start_date_protocollo; $data_calcolata->modify("+$giorni_da_inizio days"); $prestazioni_da_creare[] = $data_calcolata; } else if ($tipo_schedulazione == 'RECURRING') { $freq_n = (int)$prestazione_template['schedulazione_frequenza_n']; $freq_unit = $prestazione_template['schedulazione_frequenza_unit']; $dur_n = (int)$prestazione_template['schedulazione_durata_n']; $dur_unit = $prestazione_template['schedulazione_durata_unit']; if ($freq_n <= 0 || $dur_n <= 0) continue; $data_fine_totale = clone $start_date_protocollo; $data_fine_totale->modify("+$dur_n $dur_unit"); $data_corrente = clone $start_date_protocollo; if ($freq_unit == 'MONTH') { while ($data_corrente < $data_fine_totale) { $giorni_nel_mese = (int)$data_corrente->format('t'); $intervallo_giorni = floor($giorni_nel_mese / $freq_n); if ($intervallo_giorni == 0) $intervallo_giorni = 1; for ($i = 0; $i < $freq_n; $i++) { $giorni_aggiuntivi = $i * $intervallo_giorni; $data_prestazione = clone $data_corrente; $data_prestazione->modify('first day of this month'); $data_prestazione->modify("+$giorni_aggiuntivi days"); if ($data_prestazione < $data_fine_totale) { $prestazioni_da_creare[] = $data_prestazione; } } $data_corrente->modify('first day of next month'); } } // Aggiungere logica per 'WEEK', 'DAY' se necessario } // 3. Inserisci le prestazioni calcolate foreach($prestazioni_da_creare as $data_inizio_prestazione) { // *** INIZIO CORREZIONE *** // Rimuoviamo data_fine dai parametri $par_prestazione_istanza = [ 'id_protocollo' => $id_protocollo_istanza, 'tipo_prestazione' => $prestazione_template['tipo_prestazione'], 'nome_prestazione' => $prestazione_template['nome_prestazione'], 'descrizione_prestazione' => $prestazione_template['descrizione_prestazione'], 'data_inizio' => $data_inizio_prestazione->format('Y-m-d'), 'stato' => 'non prenotato' ]; // Scriviamo NULL direttamente nella query per bypassare il binding errato $data_fine_sql_val = "NULL"; $query_prestazione_istanza = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " (id_protocollo, tipo_prestazione, nome_prestazione, descrizione_prestazione, data_inizio, data_fine, stato) VALUES (:id_protocollo, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :data_inizio, $data_fine_sql_val, :stato)"; $config->database->query($query_prestazione_istanza, $par_prestazione_istanza); // *** FINE CORREZIONE *** } } // Ritorna l'istanza appena creata e popolata $protocollo_creato = PP_GetProtocolliCronicita(array("id_protocollo" => $id_protocollo_istanza)); if(count($protocollo_creato) == 1){ return $protocollo_creato[0]; } } return null; } /** * MODIFICA un template di protocollo esistente. * Rimuove e ricrea tutte le prestazioni. * * @param array $data Dati da modificare, deve contenere 'id_protocollo_template' * @return array|null Il protocollo modificato o null */ function PP_ModificaProtocolloTemplate($data = null){ global $config; if(empty($data['id_protocollo_template']) || empty($data['nome_protocollo'])){ return null; } $id_protocollo_template = PP_Secure($data['id_protocollo_template']); $id_medico = $config->utente['id']; // 1. Verifica che il medico sia il proprietario del template $query_check = "SELECT id FROM " . T_PROTOCOLLI_CRONICITA_TEMPLATE . " WHERE id = :id_protocollo AND id_medico_creatore = :id_medico"; $check = $config->database->query($query_check, ["id_protocollo" => $id_protocollo_template, "id_medico" => $id_medico]); if(count($check) == 0){ return null; // Non trovato o non autorizzato } // 2. Aggiorna i dati principali del Template $par_template = [ 'id_protocollo_template' => $id_protocollo_template, 'nome_protocollo' => PP_Secure($data['nome_protocollo']), 'descrizione' => PP_Secure($data['descrizione']), 'durata_giorni_default' => PP_Secure($data['durata_giorni_default']) ]; $query_update = "UPDATE " . T_PROTOCOLLI_CRONICITA_TEMPLATE . " SET nome_protocollo = :nome_protocollo, descrizione = :descrizione, durata_giorni_default = :durata_giorni_default WHERE id = :id_protocollo_template"; $config->database->query($query_update, $par_template); $par_reset = ["id_protocollo_template" => $id_protocollo_template]; // 3. Elimina le vecchie prestazioni (Figlio) $query_reset_prestazioni = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI_TEMPLATE . " WHERE id_protocollo_template = :id_protocollo_template"; $config->database->query($query_reset_prestazioni, $par_reset); // 4. Reinserisci le prestazioni (come in PP_SalvaProtocolloTemplate) $prestazioni = json_decode($data['prestazioni'], true); if(!empty($prestazioni) && is_array($prestazioni)){ foreach($prestazioni as $prestazione){ $par_prestazione = [ 'id_protocollo_template' => $id_protocollo_template, 'tipo_prestazione' => PP_Secure($prestazione['tipo_prestazione']), 'nome_prestazione' => PP_Secure($prestazione['nome_prestazione']), 'descrizione_prestazione' => PP_Secure($prestazione['descrizione_prestazione']), 'schedulazione_tipo' => PP_Secure($prestazione['schedulazione_tipo']), 'schedulazione_giorni_da_inizio' => null, 'schedulazione_frequenza_n' => null, 'schedulazione_frequenza_unit' => null, 'schedulazione_durata_n' => null, 'schedulazione_durata_unit' => null ]; if ($prestazione['schedulazione_tipo'] == 'ONE_OFF') { $par_prestazione['schedulazione_giorni_da_inizio'] = (int)$prestazione['schedulazione_giorni_da_inizio']; } else if ($prestazione['schedulazione_tipo'] == 'RECURRING') { $par_prestazione['schedulazione_frequenza_n'] = (int)$prestazione['schedulazione_frequenza_n']; $par_prestazione['schedulazione_frequenza_unit'] = PP_Secure($prestazione['schedulazione_frequenza_unit']); $par_prestazione['schedulazione_durata_n'] = (int)$prestazione['schedulazione_durata_n']; $par_prestazione['schedulazione_durata_unit'] = PP_Secure($prestazione['schedulazione_durata_unit']); } $query_prestazione = "INSERT INTO T_PROTOCOLLI_CRONICITA_PRESTAZIONI_TEMPLATE (id_protocollo_template, tipo_prestazione, nome_prestazione, descrizione_prestazione, schedulazione_tipo, schedulazione_giorni_da_inizio, schedulazione_frequenza_n, schedulazione_frequenza_unit, schedulazione_durata_n, schedulazione_durata_unit) VALUES (:id_protocollo_template, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :schedulazione_tipo, :schedulazione_giorni_da_inizio, :schedulazione_frequenza_n, :schedulazione_frequenza_unit, :schedulazione_durata_n, :schedulazione_durata_unit)"; $config->database->query($query_prestazione, $par_prestazione); } } // Ritorna il protocollo modificato $protocollo_modificato = PP_GetProtocolliTemplate(array("id_protocollo_template" => $id_protocollo_template)); if(count($protocollo_modificato) == 1){ return $protocollo_modificato[0]; } return null; } /** * ELIMINA un template di protocollo. * Non elimina le istanze già assegnate ai pazienti. * * @param array $data Deve contenere 'id_protocollo_template' * @return boolean True se eliminato, false altrimenti */ function PP_EliminaProtocolloTemplate($data = null){ global $config; if(empty($data['id_protocollo_template'])){ return false; } $id_protocollo_template = PP_Secure($data['id_protocollo_template']); $id_medico = $config->utente['id']; $par_protocollo = ["id_protocollo_template" => $id_protocollo_template]; $par_check = ["id_protocollo_template" => $id_protocollo_template, "id_medico" => $id_medico]; // 1. Elimina le prestazioni (Figlio) $query_prestazioni = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI_TEMPLATE . " WHERE id_protocollo_template = :id_protocollo_template"; $config->database->query($query_prestazioni, $par_protocollo); // 2. Elimina il template (Padre, con controllo sul medico) $query_protocollo = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_TEMPLATE . " WHERE id = :id_protocollo_template AND id_medico_creatore = :id_medico"; if($config->database->query($query_protocollo, $par_check)){ return true; } return false; } /** * Ottiene uno o più protocolli di cronicità per il medico o paziente. * * @param array $data Può contenere 'id_protocollo', 'id_paziente' * @return array Lista di protocolli con dettagli e prestazioni */ function PP_GetProtocolliCronicita($data = null){ global $config; $id_medico = $config->utente['id']; $query_where = array(); $par = array("id_medico" => $id_medico); $query_where[] = " pc.id_medico = :id_medico "; if(!empty($data['id_paziente'])){ $query_where[] = " pc.id_paziente = :id_paziente "; $par["id_paziente"] = PP_Secure($data['id_paziente']); } if(!empty($data['id_protocollo'])){ $query_where[] = " pc.id = :id_protocollo "; $par["id_protocollo"] = PP_Secure($data['id_protocollo']); } if($query_where){ $query_where = " WHERE ".implode(" AND ", $query_where); } // Query per estrarre tutto in modo piatto, simile a PP_GetEquipe $query_str = "SELECT pc.id as id_protocollo, pc.id_paziente, pc.id_medico, pc.data_creazione, pc.nome_protocollo, pc.descrizione, pc.durata_giorni, pc.data_inizio_protocollo, CONCAT(u_paz.nome, ' ', u_paz.cognome) as nome_paziente, pcp.id as id_prestazione, pcp.tipo_prestazione, pcp.nome_prestazione, pcp.descrizione_prestazione, pcp.data_inizio, pcp.data_fine, pcp.stato FROM " . T_PROTOCOLLI_CRONICITA . " pc LEFT JOIN " . T_UTENTI . " u_paz ON pc.id_paziente = u_paz.id LEFT JOIN " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " pcp ON pc.id = pcp.id_protocollo $query_where ORDER BY pc.data_creazione DESC, pcp.data_inizio ASC"; $query = $config->database->query($query_str, $par); $protocolli = []; foreach($query as $row){ $id_protocollo = $row['id_protocollo']; // Inizializza il protocollo se non esiste if(!isset($protocolli[$id_protocollo])){ $protocolli[$id_protocollo] = [ 'id_protocollo' => $id_protocollo, 'id_paziente' => $row['id_paziente'], 'id_medico' => $row['id_medico'], 'data_creazione' => $row['data_creazione'], 'nome_paziente' => $row['nome_paziente'], 'nome_protocollo'=> $row['nome_protocollo'], 'descrizione' => $row['descrizione'], 'durata_giorni' => $row['durata_giorni'], 'data_inizio_protocollo' => $row['data_inizio_protocollo'], 'prestazioni' => [] ]; } // Aggiunge le prestazioni if(!empty($row['id_prestazione']) && !isset($protocolli[$id_protocollo]['prestazioni'][$row['id_prestazione']])){ $prestazione = [ 'id_prestazione' => $row['id_prestazione'], 'tipo_prestazione' => $row['tipo_prestazione'], 'nome_prestazione' => $row['nome_prestazione'], 'descrizione_prestazione' => $row['descrizione_prestazione'], 'data_inizio' => $row['data_inizio'], 'data_fine' => $row['data_fine'], 'stato' => $row['stato'] ]; $protocolli[$id_protocollo]['prestazioni'][$row['id_prestazione']] = $prestazione; } } // Riorganizza le prestazioni come array indicizzato foreach ($protocolli as $id_protocollo => $protocollo) { $protocolli[$id_protocollo]['prestazioni'] = array_values($protocollo['prestazioni']); } return array_values($protocolli); // Ritorna un array non associativo } /** * Salva un nuovo protocollo di cronicità. * $data deve contenere: * - id_paziente * - durata (dettaglio) * - note (dettaglio) * - prestazioni (array di prestazioni) * * @param array $data Dati del protocollo * @return array|null Il protocollo salvato o null in caso di fallimento */ function PP_SalvaProtocolloCronicita($data = null){ global $config; // Controllo campi obbligatori if(empty($data['id_paziente'])){ return null; } if(is_array($data['id_paziente'])){ $data['id_paziente'] = $data['id_paziente'][0]; } $id_medico = $config->utente['id']; $par_protocollo = [ 'id_paziente' => PP_Secure($data['id_paziente']), 'id_medico' => $id_medico, 'nome_protocollo' => PP_Secure($data['nome_protocollo']), 'descrizione' => PP_Secure($data['descrizione']), 'durata_giorni' => PP_Secure($data['durata_giorni']), 'data_inizio_protocollo' => PP_Secure($data['data_inizio_protocollo']), ]; // 1. Inserisci il protocollo principale $query_protocollo = "INSERT INTO " . T_PROTOCOLLI_CRONICITA . " (id_paziente, id_medico, nome_protocollo, descrizione, durata_giorni, data_inizio_protocollo) VALUES (:id_paziente, :id_medico, :nome_protocollo, :descrizione. :durata_giorni, :data_inizio_protocollo)"; $config->database->query($query_protocollo, $par_protocollo); $id_protocollo = $config->database->lastInsertId(); if( $id_protocollo > 0 ){ /* // 2. Inserisci i dettagli (durata, note, ecc.) - Stile EAV // Rimuove chiavi già usate e 'prestazioni' per isolare i dettagli $par_dettagli = array_diff_key($data, $par_protocollo, ['prestazioni' => '']); $values_dettagli = []; foreach($par_dettagli as $campo => $valore){ if(!empty($valore)){ $campo_sec = PP_Secure($campo); $valore_sec = PP_Secure($valore); array_push($values_dettagli, "($id_protocollo, '$campo_sec', '$valore_sec')"); } } if(count($values_dettagli) > 0){ $values_dettagli_str = implode(",", $values_dettagli); $query_dettagli = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_DETTAGLI . " (id_protocollo, campo, valore) VALUES $values_dettagli_str;"; $config->database->query($query_dettagli, array()); } */ // 3. Inserisci le prestazioni if(!empty($data['prestazioni']) && is_array($data['prestazioni'])){ foreach($data['prestazioni'] as $prestazione){ $par_prestazione = [ 'id_protocollo' => $id_protocollo, 'tipo_prestazione' => PP_Secure($prestazione['tipo_prestazione']), 'nome_prestazione' => PP_Secure($prestazione['nome_prestazione']), 'descrizione_prestazione' => PP_Secure($prestazione['descrizione_prestazione']), 'data_inizio' => PP_Secure($prestazione['data_inizio']), 'data_fine' => !empty($prestazione['data_fine']) ? PP_Secure($prestazione['data_fine']) : null, 'stato' => 'non prenotato' // Stato di default ]; $query_prestazione = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " (id_protocollo, tipo_prestazione, nome_prestazione, descrizione_prestazione, data_inizio, data_fine, stato) VALUES (:id_protocollo, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :data_inizio, :data_fine, :stato)"; $config->database->query($query_prestazione, $par_prestazione); } } // Ritorna il protocollo appena creato $protocollo_creato = PP_GetProtocolliCronicita(array("id_protocollo" => $id_protocollo)); if(count($protocollo_creato) == 1){ return $protocollo_creato[0]; } } return null; } /** * Modifica un protocollo di cronicità esistente. * Rimuove e ricrea tutti i dettagli e le prestazioni. * * @param array $data Dati da modificare, deve contenere 'id_protocollo' * @return array|null Il protocollo modificato o null in caso di fallimento */ function PP_ModificaProtocolloCronicita($data = null){ global $config; if(empty($data['id_protocollo'])){ return null; } $id_protocollo = PP_Secure($data['id_protocollo']); $id_medico = $config->utente['id']; // 1. Verifica che il medico sia il proprietario del protocollo $query_check = "SELECT id FROM " . T_PROTOCOLLI_CRONICITA . " WHERE id = :id_protocollo AND id_medico = :id_medico"; $check = $config->database->query($query_check, ["id_protocollo" => $id_protocollo, "id_medico" => $id_medico]); if(count($check) == 0){ return null; // Non trovato o non autorizzato } // 2. Aggiorna data modifica (se la tabella la prevede) // $query_update = "UPDATE " . T_PROTOCOLLI_CRONICITA . " SET data_modifica = NOW() WHERE id = :id_protocollo"; // $config->database->query($query_update, ["id_protocollo" => $id_protocollo]); $par_reset = ["id_protocollo" => $id_protocollo]; // 3. Elimina i vecchi dettagli (stile PP_ModificaPaziente) /* $query_reset_dettagli = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_DETTAGLI . " WHERE id_protocollo = :id_protocollo"; $config->database->query($query_reset_dettagli, $par_reset); */ // 4. Elimina le vecchie prestazioni $query_reset_prestazioni = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " WHERE id_protocollo = :id_protocollo"; $config->database->query($query_reset_prestazioni, $par_reset); // 5. Reinserisci i dettagli $par_esclusi = ['id_protocollo' => '', 'id_paziente' => '', 'id_medico' => '', 'prestazioni' => '']; /* $par_dettagli = array_diff_key($data, $par_esclusi); $values_dettagli = []; foreach($par_dettagli as $campo => $valore){ if(!empty($valore)){ $campo_sec = PP_Secure($campo); $valore_sec = PP_Secure($valore); array_push($values_dettagli, "($id_protocollo, '$campo_sec', '$valore_sec')"); } } if(count($values_dettagli) > 0){ $values_dettagli_str = implode(",", $values_dettagli); $query_dettagli = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_DETTAGLI . " (id_protocollo, campo, valore) VALUES $values_dettagli_str;"; $config->database->query($query_dettagli, array()); } */ // 6. Reinserisci le prestazioni if(!empty($data['prestazioni']) && is_array($data['prestazioni'])){ foreach($data['prestazioni'] as $prestazione){ $par_prestazione = [ 'id_protocollo' => $id_protocollo, 'tipo_prestazione' => PP_Secure($prestazione['tipo_prestazione']), 'nome_prestazione' => PP_Secure($prestazione['nome_prestazione']), 'descrizione_prestazione' => PP_Secure($prestazione['descrizione_prestazione']), 'data_inizio' => PP_Secure($prestazione['data_inizio']), 'data_fine' => !empty($prestazione['data_fine']) ? PP_Secure($prestazione['data_fine']) : null, // Se lo stato viene passato, lo uso, altrimenti default 'stato' => !empty($prestazione['stato']) ? PP_Secure($prestazione['stato']) : 'non prenotato' ]; $query_prestazione = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " (id_protocollo, tipo_prestazione, nome_prestazione, descrizione_prestazione, data_inizio, data_fine, stato) VALUES (:id_protocollo, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :data_inizio, :data_fine, :stato)"; $config->database->query($query_prestazione, $par_prestazione); } } // Ritorna il protocollo modificato $protocollo_modificato = PP_GetProtocolliCronicita(array("id_protocollo" => $id_protocollo)); if(count($protocollo_modificato) == 1){ return $protocollo_modificato[0]; } return null; } /** * Elimina un protocollo di cronicità e tutti i suoi dettagli e prestazioni. * * @param array $data Deve contenere 'id_protocollo' * @return boolean True se eliminato, false altrimenti */ function PP_EliminaProtocolloCronicita($data = null){ global $config; if(empty($data['id_protocollo'])){ return false; } $id_protocollo = PP_Secure($data['id_protocollo']); $id_medico = $config->utente['id']; $par_protocollo = ["id_protocollo" => $id_protocollo]; $par_check = ["id_protocollo" => $id_protocollo, "id_medico" => $id_medico]; // 1. Elimina le prestazioni (Figlio) $query_prestazioni = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " WHERE id_protocollo = :id_protocollo"; $config->database->query($query_prestazioni, $par_protocollo); // 2. Elimina i dettagli (Figlio) /* $query_dettagli = "DELETE FROM " . T_PROTOCOLLI_CRONICITA_DETTAGLI . " WHERE id_protocollo = :id_protocollo"; $config->database->query($query_dettagli, $par_protocollo); */ // 3. Elimina il protocollo (Padre, con controllo sul medico) $query_protocollo = "DELETE FROM " . T_PROTOCOLLI_CRONICITA . " WHERE id = :id_protocollo AND id_medico = :id_medico"; if($config->database->query($query_protocollo, $par_check)){ return true; } return false; } /** * Modifica lo stato di una singola prestazione di un protocollo. * Es: da 'non prenotato' a 'prenotato' o 'effettuato'. * * @param array $data Deve contenere 'id_prestazione' e 'stato' * @return boolean True se aggiornato, false altrimenti */ function PP_ModificaStatoPrestazioneProtocollo($data = null){ global $config; if(empty($data['id_prestazione']) || empty($data['stato'])){ return false; } $id_medico = $config->utente['id']; $par = [ 'id_prestazione' => PP_Secure($data['id_prestazione']), 'stato' => PP_Secure($data['stato']), 'id_medico' => $id_medico ]; // Aggiorna lo stato solo se la prestazione appartiene a un protocollo del medico loggato $query = "UPDATE " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " pcp JOIN " . T_PROTOCOLLI_CRONICITA . " pc ON pcp.id_protocollo = pc.id SET pcp.stato = :stato WHERE pcp.id = :id_prestazione AND pc.id_medico = :id_medico"; if($config->database->query($query, $par)){ return true; } return false; } /** * Salva una *singola* prestazione per un protocollo di cronicità esistente. * Usato dalla modale "Aggiungi Prestazione". * * @param array $data Dati prestazione (id_protocollo, tipo_prestazione, nome_prestazione, etc.) * @return array|null La prestazione salvata o null */ function PP_SalvaPrestazioneProtocollo($data = null){ global $config; // Controllo campi if(empty($data['id_protocollo']) || empty($data['tipo_prestazione']) || empty($data['nome_prestazione']) || empty($data['data_inizio'])){ return null; } $id_medico = $config->utente['id']; // Verifica che il medico sia il proprietario del protocollo $query_check = "SELECT id FROM " . T_PROTOCOLLI_CRONICITA . " WHERE id = :id_protocollo AND id_medico = :id_medico"; $check = $config->database->query($query_check, ["id_protocollo" => $data['id_protocollo'], "id_medico" => $id_medico]); if(count($check) == 0){ return null; // Non trovato o non autorizzato } // Rimuoviamo data_fine dai parametri di base $par_prestazione = [ 'id_protocollo' => PP_Secure($data['id_protocollo']), 'tipo_prestazione' => PP_Secure($data['tipo_prestazione']), 'nome_prestazione' => PP_Secure($data['nome_prestazione']), 'descrizione_prestazione' => PP_Secure($data['descrizione_prestazione']), 'data_inizio' => PP_Secure($data['data_inizio']), 'stato' => 'non prenotato' // Stato di default ]; // Gestiamo data_fine separatamente per inserire NULL o il parametro $data_fine_sql_val = "NULL"; if (!empty($data['data_fine'])) { // Se la data c'è, la aggiungiamo ai parametri e usiamo il placeholder $data_fine_sql_val = ":data_fine"; $par_prestazione['data_fine'] = PP_Secure($data['data_fine']); } $query_prestazione = "INSERT INTO " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " (id_protocollo, tipo_prestazione, nome_prestazione, descrizione_prestazione, data_inizio, data_fine, stato) VALUES (:id_protocollo, :tipo_prestazione, :nome_prestazione, :descrizione_prestazione, :data_inizio, $data_fine_sql_val, :stato)"; $config->database->query($query_prestazione, $par_prestazione); $id_prestazione = $config->database->lastInsertId(); if($id_prestazione > 0) { // Ritorna la prestazione appena creata $query_get = "SELECT * FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " WHERE id = :id_prestazione"; $prestazione = $config->database->query($query_get, ["id_prestazione" => $id_prestazione]); return $prestazione[0]; } return null; } /** * Elimina una singola prestazione di un protocollo. * * @param array $data Deve contenere 'id_prestazione' * @return boolean True se eliminata, false altrimenti */ function PP_EliminaPrestazioneProtocollo($data = null){ global $config; if(empty($data['id_prestazione'])){ return false; } $id_medico = $config->utente['id']; $par = [ 'id_prestazione' => PP_Secure($data['id_prestazione']), 'id_medico' => $id_medico ]; // Elimina la prestazione solo se il medico è il proprietario del protocollo padre $query = "DELETE pcp FROM " . T_PROTOCOLLI_CRONICITA_PRESTAZIONI . " pcp JOIN " . T_PROTOCOLLI_CRONICITA . " pc ON pcp.id_protocollo = pc.id WHERE pcp.id = :id_prestazione AND pc.id_medico = :id_medico"; if($config->database->query($query, $par)){ return true; } return false; } function PP_ModificaStepIstanzaPaziente($data) { global $config; // Aggiorniamo la prestazione, la data prevista e la priorità dello step specifico $q = "UPDATE pdta_pazienti_steps SET id_prestazione_catalogo = :id_prest, data_prevista = :data_p, priorita = :prio WHERE id = :id_step"; return $config->database->query($q, [ 'id_prest' => intval($data['id_prestazione']), 'data_p' => PP_Secure($data['data_prevista']), 'prio' => PP_Secure($data['priorita']), 'id_step' => intval($data['id_step']) ]); } ?> utente["id"]; $where[] = " (m.id_mittente = $id_utente OR m.id_destinatario = $id_utente) "; if(!empty($data['id'])){ $where[] = " m.id = {$data['id']} "; } if(!empty($data['id_utente'])){ $where[] = " (m.id_mittente = {$data['id_utente']} OR m.id_destinatario = {$data['id_utente']}) "; } if(count($where) > 0){ $where = " WHERE ".implode(" AND ", $where); } $query = "SELECT m.*, IF(m.id_mittente = $id_utente, m.id_destinatario, m.id_mittente) as id_chat, CONCAT(u.nome, ' ', u.cognome) as mittente, CONCAT(u2.nome, ' ', u2.cognome) as destinatario, m.allegati FROM " . T_MESSAGGI . " m LEFT JOIN " .T_UTENTI. " u ON u.id = m.id_mittente LEFT JOIN " .T_UTENTI. " u2 ON u2.id = m.id_destinatario $where ORDER BY id_chat, data_creazione ASC"; $query = $config->database->query($query, array()); $messaggi = []; foreach($query as $messaggio){ $messaggio['allegati'] = json_decode($messaggio['allegati']); if(!isset($messaggi[$messaggio['id_chat']])){ $messaggi[$messaggio['id_chat']] = array(); } array_push($messaggi[$messaggio['id_chat']], $messaggio); } return $messaggi; } function PP_SalvaMessaggio($data = null){ global $config; $columns = ['id_destinatario', 'id_mittente', 'testo', 'letto', 'allegati']; $keys = []; $values = []; /* if(!empty($files['files']['name'])){ $data['allegati'] = []; foreach($files['files']['name'] as $key=>$value){ $path = PP_SecureFilePath($value); if(move_uploaded_file($files['files']["tmp_name"][$key],ABSPATH.$path)) $data['allegati'][] = $path; } $data['allegati'] = json_encode($data['allegati']); } */ $data['id_mittente'] = $config->utente['id']; if(empty($data['id_destinatario'])){ return false; } foreach($data as $key=>$value){ if(in_array($key, $columns) && $value != ''){ $keys[] = $key; $values[] = "'".$value."'"; } } $query = "INSERT INTO ".T_MESSAGGI." (".implode(",", $keys).") VALUES (".implode(",", $values).")"; $config->database->query($query, array()); $id_messaggio = $config->database->lastInsertId(); //Invio la notifica PP_CreaNotifica(array('id_mittente'=>$config->utente['id'], 'id_destinatario'=>$data['id_destinatario'], 'titolo'=>'Nuovo messaggio da '.$config->utente['nome'].' '.$config->utente['cognome'], 'contenuto'=>$data['testo'], 'tipo'=>'fa fa-envelope', 'link'=>'messaggi')); if($id_messaggio > 0){ $messaggio = PP_GetMessaggi(array("id" => $id_messaggio)); return $messaggio[$data['id_destinatario']][0]; } return false; } function PP_EliminaMessaggio($data){ global $config; if(empty($data['id'])){ return false; } $messaggio = PP_GetMessaggi($data); if(!empty($messaggio[0]['allegati'])){ foreach($messaggio[0]['allegati'] as $allegato){ unlink(ABSPATH.$allegato); } } $query = "DELETE FROM " . T_MESSAGGI . " WHERE id = {$data['id']}"; $config->database->query($query, array()); return true; } function PP_ImportanteMessaggio($data){ global $config; if(empty($data['id'])){ return false; } if(!isset($data['importante'])){ return false; } $query = "UPDATE " . T_MESSAGGI . " SET importante = {$data['importante']} WHERE id = {$data['id']}"; $config->database->query($query, array()); return true; } ?>